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

问题描述 投票:4回答:1

[更新]:当前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. 在插槽迁移时,订阅新节点上的通道并保持旧连接打开。
  4. 将消息从旧连接转发到应用程序,直到它关闭并记住这些消息。
  5. 迁移完成并关闭旧连接后,转发来自新连接的消息,从第一个连接中修剪记住的消息。

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

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

go redis publish-subscribe sharding redis-cluster
1个回答
5
投票

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

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

资料来源:Redis Cluster Specification

© www.soinside.com 2019 - 2024. All rights reserved.