Redis发布订阅
Redis发布订阅是一种消息通信的模式:发布者发送消息,订阅者接收消息
三个角色:消息发布者、消息接收者、订阅的频道
命令 | 作用 |
---|---|
publish channel message |
发布消息到指定频道 |
psubscribe pattern [pattern..] |
订阅一个或者多个符合给点pattern的频道 |
pubsub subcommand [argument [argument..]] |
查看订阅和发布系统状态 |
punsubscribe [pattern [pattern..]] |
退订所有符合模式的频道 |
subscribe channel [channel..] |
订阅指定频道 |
unsubscribe channel [channel..] |
退订指定频道 |
下面直接上案例:
充当订阅者的cli
1 | 127.0.0.1:6379> SUBSCRIBE study |
充当发布者的cli
1 | 127.0.0.1:6379> PUBLISH study study |
订阅者
1 | 127.0.0.1:6379> SUBSCRIBE study |
原理:
Redis订阅发布底层是使用C实现的
Redis 通过 PUBLISH 、SUBSCRIBE 和 PSUBSCRIBE 等命令实现发布和订阅功能。
通过 SUBSCRIBE 命令订阅某频道后,redis-server 里维护了一个字典,字典的键就是一个个频道!而字典的值则是一个链表,
链表中保存了所有订阅这个 channel 的客户端。SUBSCRIBE 命令的关键,就是将客户端添加到给定 channel 的订阅链表中。
通过 PUBLISH 命令向订阅者发送消息,redis-server 会使用给定的频道作为键,在它所维护的 channel 字典中查找记录了订阅这
个频道的所有客户端的链表,遍历这个链表,将消息发布给所有订阅者。