duanjue7745 2018-08-28 00:41
浏览 76
已采纳

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

[UPDATE]: Current redis sends every published message to every node in entire cluster:

/* -----------------------------------------------------------------------------
 * 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);
}

This is original text of question, which is not correct:

As I understand it I need to:

  1. Given a channel, find the the node that owns the hash slot.

  2. Subscribe to that node and also to cluster:slots to detect migrations.

  3. Upon slot migration, subscribe to the channel on the new node and keep the old connection open.

  4. Forward messages to the application from the old connection until it closes and remember those messages.

  5. When migration is complete and the old connection closed, forward messages from the new connection, trimming the remembered messages from the first connection.

Do any of the golang redis client library do this? I’ve looked through many and it feels like I need to write this logic myself, constantly polling CLUSTER SLOTS or listening to a pubsub of that info to know when shards increase or decrease and move my existing pubsub scriptions from one server to another.

I.e. there lots of golang libs that handle normal GET key with cluster even if the number of shards changes. But pubsub and cluster is a whole other thing right?

  • 写回答

1条回答 默认 最新

  • dongxianghuan3587 2018-08-28 09:36
    关注

    PubSub channels in the Redis cluster are shared among all nodes - messages are passed via the internal bus so you don't need a special client and/or logic.

    In a Redis Cluster clients can subscribe to every node, and can also publish to every other node. The cluster will make sure that published messages are forwarded as needed.

    Source: Redis Cluster Specification

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 adb连接不到手机是怎么回事?
  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联
  • ¥15 VB.NET操作免驱摄像头
  • ¥15 笔记本上移动热点开关状态查询
  • ¥85 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目