Redis之发布订阅

redis的发布与订阅功能有PUBLISH、SUBSCRIBE、PSUBSRIBE等命令组成。
通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道,从而成为这些频道的订阅者,每当有其他客户端向被订阅的频道发送消息时,频道的所有订阅者都会收到这条消息。
在这里插入图片描述
通过执行PSUBSCRIBE命令订阅一个或多个消息模式,从而成为这些模式的订阅者:每当有其他客户端向某个频道发送消息时,消息不仅会被发送给这个频道的所有订阅者,他还会被发送给所有与这个频道相匹配的模式的订阅者。
在这里插入图片描述
当一个客户端执行SUBSCRIBE命令订阅某个或某些频道的时候,这个客户端与被订阅频道直接按就建立起了一种订阅关系。
redis将所有频道的订阅关系都保存在服务器状态的pubsub_channels字典里面,这个字典的键时某个被订阅频道,而键的值则是一个链表,链表里面记录了所有订阅这个频道的客户端。
在这里插入图片描述
每当客户端执行SUBSCRIBE命令订阅某个或某些频道的时候,服务器都会将客户端与被订阅的频道在pubsub_channels字典中进行关联。
根据频道是否已经有其他订阅者,关联操作分为两种情况执行:
1、如果频道已经有其他订阅者,那么他在pubsub_channels字典中必然有相应的订阅者链表,程序唯一要做的就是将客户端添加到订阅者链表的末尾
2、如果频道还未有任何订阅者,那么它必然不存在于pubsub_channels字典,程序首先要在pubsub_channels字典中为频道创建一个键,并将这个键设置为空链表,然后再将客户端添加到链表,成为链表的第一个元素
退订频道
UNSUBSCRIBE命令的行为和SUBSCRIBE命令的行为正好相反,当一个客户端推定某个或某些频道的时候,服务器将从pubsub_channels中接触客户端与退订频道之间的关联。
模式的订阅与退订
服务器将所有模式的订阅关系都保存在服务器状态的pubsub_patterns属性里面,pubsub_patterns属性是一个链表,链表中的每个节点都包含着一个pubsubPattern结构,这个结构的pattern属性记录了被订阅的模式,而client属性则记录了订阅模式的客户端。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值