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

时间:2018-08-28 00:41:10

标签: go redis publish-subscribe sharding redis-cluster

[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);
}

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

  

据我了解,我需要:

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

  2.   
  3. 订阅该节点并订阅cluster:slots以检测迁移。

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

  6.   
  7. 从旧的连接向应用程序转发消息,直到关闭并记住这些消息。

  8.   
  9. 迁移完成且旧连接已关闭时,转发来自新连接的消息,并修剪记住的消息   从第一个连接开始。

  10.   
     

任何golang redis客户端库都可以这样做吗?我看过了   很多,感觉就像我需要自己不断写这种逻辑   轮询CLUSTER SLOTS或收听该信息的发布订阅即可   当分片增加或减少并移动我现有的pubsub时   一台服务器到另一台服务器的描述。

     

即有很多golang库可以与集群一起处理普通的GET密钥   即使分片的数量发生了变化。但是pubsub和cluster是一个   其他事情对吗?

1 个答案:

答案 0 :(得分:5)

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

  

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

来源:Redis Cluster Specification