Redis发布订阅实现原理

发布订阅中使用到的命令就只有三个:PUBLISH,SUBSCRIBE,PSUBSCRIBE

  • PUBLISH 用于发布消息
  • SUBSCRIBE 也叫频道订阅,用于订阅某一特定的频道
  • PSUBSCRIBE 也叫模式订阅,用于订阅某一组频道,使用glob的方式,比如xxx-*可以匹配xxx-a,和xxx-b,xxx-ddd等等

订阅频道: pubsub_channels

关联操作:

  • 如果已经存在订阅者,则添加到链表的尾部
  • 如果没有订阅者,那么创建频道,然后添加订阅者

删除操作:

  • 找到对应的链表,进行删除
  • 如果删除后,链表为空,则删除频道

模式订阅: pubsub_patterns

client-7订阅music.*
client-8订阅book.*
client-9订阅news.*

订阅模式:

  • 新建一个pubsubPattern结构
  • 添加到链表的尾部

退订模式:

  • 查找相应的pubsubPattern然后删除

发送消息:

  • 将消息发送给channel频道的所有订阅者
  • 遍历整个pubsub_patterns表,查找匹配的模式,如果有一个或者多个模式与频道匹配,将消息发送给pattern模式的订阅者

相关命令:

  • 查看所有的频道:PUBSUB CHANNELS
  • 查询订阅者的数量:PUBSUB NUMSUB
  • 查询服务器被订阅者的数量:PUBSUB NUMPAT
posted @   xingoo  阅读(5030)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2013-10-10 奋斗目标
2013-10-10 C/C++ 遇到0xcccccccc访问冲突
2012-10-10 选择模型2
2012-10-10 袖珍C库
2012-10-10 第三章 C++中的C ----《C++编程思想》
点击右上角即可分享
微信分享提示