是否有一个golang redis客户端可以自动检测pubsub的新分片?

And*_*row 4 sharding go publish-subscribe redis redis-cluster

[更新]:当前redis将每个已发布的消息发送到整个集群中的每个节点:

/* -----------------------------------------------------------------------------
 * CLUSTER Pub/Sub support
 *
 * For now we do very little, just propagating PUBLISH messages across the whole
 * cluster. In the future we'll try to get smarter and avoiding propagating those
 * messages to hosts without receives for a given channel.
 * -------------------------------------------------------------------------- */
void clusterPropagatePublish(robj *channel, robj *message) {
    clusterSendPublish(NULL, channel, message);
}
Run Code Online (Sandbox Code Playgroud)

这是问题的原始文本,这是不正确的:

据我所知,我需要:

  1. 给定一个通道,找到拥有该哈希槽的节点.

  2. 订阅该节点以及群集:插槽以检测迁移.

  3. 在插槽迁移时,订阅新节点上的通道并保持旧连接打开.

  4. 将消息从旧连接转发到应用程序,直到它关闭并记住这些消息.

  5. 迁移完成并关闭旧连接后,转发来自新连接的消息,修剪来自第一个连接的记忆消息.

golang redis客户端库中的任何一个都可以这样做吗?我已经浏览了很多,感觉我需要自己编写这个逻辑,不断轮询CLUSTER SLOTS或监听该信息的pubsub,以了解分片何时增加或减少,并将我现有的pubsub脚本从一个服务器移动到另一个服务器.

也就是说,即使分片数量发生变化,也有很多golang库可以处理普通的GET密钥.但是pubsub和cluster是另一回事吗?

Ita*_*ber 5

Redis集群中的PubSub通道在所有节点之间共享 - 消息通过内部总线传递,因此您不需要特殊的客户端和/或逻辑.

在Redis群集中,客户端可以订阅每个节点,也可以发布到每个其他节点.群集将确保根据需要转发已发布的消息.

来源:Redis集群规范

  • 理论上它应该可以工作,但实际上我会在相信任何人在SO上写的东西之前测试它;) (4认同)