Redis发布订阅与原理

Posted 白龙码~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:返回当前服务器中订阅了模式的订阅者数量。

以上是关于Redis发布订阅与原理的主要内容,如果未能解决你的问题,请参考以下文章

Redis发布订阅和事务实现原理

Redis发布订阅和事务实现原理

Redis:八发布订阅实现原理

Redis学习之旅--订阅与发布

面试被问到Redis实现发布与订阅,手摸手教

redis之pub/sub(发布与订阅)