Redis发布订阅与原理

Redis发布与订阅

Redis的发布与订阅功能通过PUBLISH、SUBSCRIBE/UNSUBSCRIBE、PSUBSCRIBE/PUNSUBSCRIBE等命令组成。

  • 通过SUBSCRIBE,客户端可以订阅一个或多个频道,成为这些频道的订阅者,并可以通过UBSUBSCRIBE退订。
  • 通过PSUBSCRIBE,客户端可以订阅一个或多个模式,成为这些频道的订阅者,并可以通过PUBSUBSCRIBE退订。
  • 每当有其他客户端通过PUBLISH向这些频道发送消息时,频道的所有订阅者都将收到这条消息。

注:模式就是使用了通配符的频道名,比如news.*。

通配符:

  • ?:一个占位符
  • *:0至多个占位符
  • ?*:一个及以上个占位符

1、订阅与退订的原理

I. 频道的订阅与退订

  1. Redis服务器维护了一个名为pubsub_channels字典,字典的键是被订阅的频道值是订阅了这些频道的客户端链表

  2. 当一个客户端订阅(SUBSCRIBE)频道时,服务器首先到字典中查找是否有这个频道。

    • 如果,则将该客户端放至链表的末尾。

    • 如果没有,则先创建该频道的键,然后将客户端插入链表。

  3. 当一个客户端退订(UNSUBSCRIBE)频道时,服务器到字典中找到频道的键并删除该客户端的信息。如果删除后链表为空,则将键一并删除。

II. 模式的订阅与退订

  1. Redis服务器维护了一个名为pubsub_pattern链表,每个链表节点存储了客户端及其订阅的模式
  2. 当客户端订阅(PSUBSCRIBE)模式时,服务器创建一个存储客户端及其订阅模式的链表节点,并将其添加至链表的末尾。
  3. 当客户端退订(PUNSUBSCRIBE)模式时,服务器在链表中寻找对应的节点并将其删除。

2、发布的原理

I. 发布给频道订阅者

Redis服务器根据频道名到字典中查找对应的订阅客户端链表,然后将信息发送给所有的订阅者。

II. 发布给模式订阅者

Redis服务器遍历pubsub_pattern链表,并将消息发送给订阅了对应模式的客户端。

3、其它命令

  • PUBSUB CHANNELS [pattern]:查看当前服务器中被订阅的频道,如果提供了pattern字段,则查看当前服务器中符合pattern模式的频道。
  • PUBSUB NUMSUB channel [channel1 …]:返回当前服务器中对应频道的订阅者数量。
  • PUBSUB NUMPAT:返回当前服务器中订阅了模式的订阅者数量。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白龙码~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值