Redis 发布与订阅

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值