【Redis】发布与订阅

  • Post author:
  • Post category:其他



目录


发布与订阅


频道的订阅与退订


订阅频道


退订频道


模式的订阅与退订


订阅模式


退订模式


发送消息


将消息发送给频道订阅者


将消息发送给模式订阅者


发布与订阅

通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道,从而成为这些频道的订阅者,每当有其它客户端向被订阅的频道发送消息时,频道的所有订阅者都会收到这条消息

除订阅频道外,客户端还可以通过执行PUBSCRIBE命令订阅一个或多个模式,从而成为这些模式的订阅者,每当有其它客户端向某个频道发送消息时,消息不仅会被发送给这个频道的所有订阅者,还会被发送给所有与这个频道相匹配的模式的订阅者

频道的订阅与退订

订阅频道

执行SUBCRIBE命令订阅频道

  1. 如果频道已经有订阅者,则将客户端添加到订阅者链表末尾
  2. 如果频道没有,则在字典中为频道创建一个键,并将这个键的值设置为空链表,再将客户端添加到链表

退订频道

执行UNSUBCRIBE命令订阅频道

  1. 根据被退订频道的名字,在字典中找到频道对应的订阅者链表,然后删除链表中该客户端的信息
  2. 如果删除退订客户端后链表为空链表,则删除字典中频道对应的键

模式的订阅与退订

订阅模式

执行PSUBSCRIBR命令订阅模式

  1. 新建一个pubsubPattern结构,将结构的pattern属性设置为被订阅的模式,client属性设置为订阅模式的客户端
  2. 将pubsubPattern结构添加到pubsub_patterns链表的表尾

退订模式

执行PUNSUBSCRIBR命令退订模式

当一个客户端退订某个或某些模式的时候,服务器将在pubsub_patterns链表中查找并删除那些pattern属性为被退订模式,并且client属性为执行退订命令的客户端的pubsubPattern结构

发送消息

将消息发送给频道订阅者

PUBLISH命令将在pubsub_channels字典里找到频道channel的订阅者名单(一个链表),然后将消息发送给名单上的所有客户端

将消息发送给模式订阅者

PUBLISH命令要做的就是遍历整个pubsub_patterns链表,查找那些与channel频道相匹配的模式,并将消息发送给订阅了这些模式的客户端



版权声明:本文为weixin_45912201原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。