0
点赞
收藏
分享

微信扫一扫

Redis 发布与订阅

雷亚荣 2022-03-26 阅读 112

这里写目录标题

Redis发布与订阅

基本命令

PSUBSCRIBE pattern [pattern ...]   #订阅一个或多个符合给定模式的频道。
PUBSUB subcommand [argument [argument ...]]   #查看订阅与发布系统状态。
PUBLISH channel message  #将信息发送到指定的频道。
PUNSUBSCRIBE [pattern [pattern ...]]   #退订所有给定模式的频道。
SUBSCRIBE channel [channel ...]   #订阅给定的一个或多个频道的信息。
UNSUBSCRIBE [channel [channel ...]]   #指退订给定的频道。

原理

服务器中维护着一个pubsub_channels字典,所有的频道和订阅关系都存储在这里。字典的键为频道的名称,而值为订阅频道的客户端链表。

当有新的客户端订阅某个频道时,会发生两种情况中的一种:

  1. 如果频道已经存在,则新的客户端会添加到pubsub_channels对应频道的链表末尾。
  2. 如果频道原本不存在,则会为频道创建一个键,该客户端成为链表的第一个元素。

当一个客户端退订一个频道的时候,pubsub_channels对应键的链表会删除该客户端。

当频道给客户端发送信息的时候,服务器会遍历pubsub_channels中对应键的链表,向每一个客户端发送信息。

服务器还维护着一个pubsub_patterns链表,链表的pattern属性记录了被订阅的模式,而client属性记录了订阅模式的客户端。

当有新的客户端订阅某个模式的时,会进行如下步骤:

  1. 创建一个链表节点,pattern属性记录订阅的模式,client记录订阅模式的客户端。
  2. 将这个链表节点添加到pubsub_patterns链表中。

当一个客户端退订某一个模式的时候,服务器遍历pubsob_patterns找到对应的pattern同时也是对应该client客户端的节点,将该节点删除。

当模式给客户端发送信息的时候,服务器遍历pubsub_channels,查找与channels频道相匹配的模式并将消息发送给订阅了这些模式的客户端。

Redis订阅系统的优势

  1. 当一个客户端向频道发送一个信息,订阅了同一个频道/模式的多个客户端可以同时接收到信息,类似广播的机制。
  2. 便于Sentinel哨兵与服务器间的通信并进行监控。
举报

相关推荐

0 条评论