Redis

版本下载量许可协议聊天

Hocuspocus 可以通过 Redis 扩展进行水平扩展。你可以在负载均衡器后启动多个服务器实例,通过 Redis 同步更改和状态感知。Hocuspocus 会使用 Redis 将接收到的所有更新传播给其他所有实例,从而将更新转发给所有 Hocuspocus 实例的客户端。

Redis 扩展不负责持久化数据;它仅在实例间同步数据。请使用 数据库 扩展来存储你的文档。

请注意,所有消息都会在所有 Hocuspocus 实例上处理,因此如果你想通过启动多个服务器来降低 CPU 负载,就不应该通过 Redis 将它们连接起来。

感谢 @tommoor 编写了该扩展的初始实现。

安装

使用以下命令安装 Redis 扩展:

npm install @hocuspocus/extension-redis

配置

关于所有可用的 Redis 和 Redis 集群选项的完整文档,请参考
ioredis API 文档

import { Server } from "@hocuspocus/server";
import { Redis } from "@hocuspocus/extension-redis";

const server = new Server({
  extensions: [
    new Redis({
      // [必填] 你的 Redis 实例主机名
      host: "127.0.0.1",

      // [必填] 你的 Redis 实例端口
      port: 6379,
    }),
  ],
});

server.listen();

使用

Redis 扩展与数据库扩展配合良好。一旦某个实例存储了文档,文档会在其他实例被锁定,以避免写冲突。

import { Server } from "@hocuspocus/server";
import { Logger } from "@hocuspocus/extension-logger";
import { Redis } from "@hocuspocus/extension-redis";
import { SQLite } from "@hocuspocus/extension-sqlite";

// 服务器 1
const server = new Server({
  name: "server-1", // 请确保使用唯一的服务器名称
  port: 1234,
  extensions: [
    new Logger(),
    new Redis({
      host: "127.0.0.1", // 请确保使用相同的 Redis 实例 :-)
      port: 6379,
    }),
    new SQLite(),
  ],
});

server.listen();

// 服务器 2
const anotherServer = new Server({
  name: "server-2",
  port: 1235,
  extensions: [
    new Logger(),
    new Redis({
      host: "127.0.0.1",
      port: 6379,
    }),
    new SQLite(),
  ],
});

anotherServer.listen();