Redis发布订阅实现原理
原文出处: xingoo
发布订阅中使用到的命令就只有三个:PUBLISH,SUBSCRIBE,PSUBSCRIBE
- PUBLISH 用于发布消息
- SUBSCRIBE 也叫频道订阅,用于订阅某一特定的频道
- PSUBSCRIBE 也叫模式订阅,用于订阅某一组频道,使用glob的方式,比如xxx-*可以匹配xxx-a,和xxx-b,xxx-ddd等等
订阅频道: pubsub_channels
关联操作:
- 如果已经存在订阅者,则添加到链表的尾部
- 如果没有订阅者,那么创建频道,然后添加订阅者
删除操作:
- 找到对应的链表,进行删除
- 如果删除后,链表为空,则删除频道
模式订阅: pubsub_patterns
1
2
3
|
client- 7 订阅music.* client- 8 订阅book.* client- 9 订阅news.* |
订阅模式:
- 新建一个pubsubPattern结构
- 添加到链表的尾部
退订模式:
- 查找相应的pubsubPattern然后删除
发送消息:
- 将消息发送给channel频道的所有订阅者
- 遍历整个pubsub_patterns表,查找匹配的模式,如果有一个或者多个模式与频道匹配,将消息发送给pattern模式的订阅者
相关命令:
- 查看所有的频道:PUBSUB CHANNELS
- 查询订阅者的数量:PUBSUB NUMSUB
- 查询服务器被订阅者的数量:PUBSUB NUMPAT
stay hungry,stay foolish