[UPDATE]:当前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);
}
这是问题的原始文本,不正确:
据我了解,我需要:
给一个通道,找到拥有哈希槽的节点。
订阅该节点并订阅cluster:slots以检测迁移。
在插槽迁移后,订阅新节点上的通道并保持旧连接打开。
从旧的连接向应用程序转发消息,直到关闭并记住这些消息。
迁移完成且旧连接已关闭时,转发来自新连接的消息,并修剪记住的消息 从第一个连接开始。
任何golang redis客户端库都可以这样做吗?我看过了 很多,感觉就像我需要自己不断写这种逻辑 轮询
CLUSTER SLOTS
或收听该信息的发布订阅即可 当分片增加或减少并移动我现有的pubsub时 一台服务器到另一台服务器的描述。即有很多golang库可以与集群一起处理普通的GET密钥 即使分片的数量发生了变化。但是pubsub和cluster是一个 其他事情对吗?
答案 0 :(得分:5)
Redis群集中的PubSub通道在所有节点之间共享-消息通过内部总线传递,因此您不需要特殊的客户端和/或逻辑。
在Redis群集中,客户端可以订阅每个节点,也可以发布到其他每个节点。群集将确保已发布的邮件根据需要进行转发。