Redis-发布订阅

Redis发布订阅

Redis发布订阅是一种消息通信的模式:发布者发送消息,订阅者接收消息

三个角色:消息发布者、消息接收者、订阅的频道

命令 作用
publish channel message 发布消息到指定频道
psubscribe pattern [pattern..] 订阅一个或者多个符合给点pattern的频道
pubsub subcommand [argument [argument..]] 查看订阅和发布系统状态
punsubscribe [pattern [pattern..]] 退订所有符合模式的频道
subscribe channel [channel..] 订阅指定频道
unsubscribe channel [channel..] 退订指定频道

下面直接上案例:

充当订阅者的cli

1
2
3
4
5
127.0.0.1:6379> SUBSCRIBE study
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "study"
3) (integer) 1

充当发布者的cli

1
2
127.0.0.1:6379> PUBLISH study study
(integer) 1

订阅者

1
2
3
4
5
6
7
8
127.0.0.1:6379> SUBSCRIBE study
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "study"
3) (integer) 1
1) "message"
2) "study"
3) "designpattern"

原理:

Redis订阅发布底层是使用C实现的

Redis 通过 PUBLISH 、SUBSCRIBE 和 PSUBSCRIBE 等命令实现发布和订阅功能。

通过 SUBSCRIBE 命令订阅某频道后,redis-server 里维护了一个字典,字典的键就是一个个频道!而字典的值则是一个链表,
链表中保存了所有订阅这个 channel 的客户端。SUBSCRIBE 命令的关键,就是将客户端添加到给定 channel 的订阅链表中。
通过 PUBLISH 命令向订阅者发送消息,redis-server 会使用给定的频道作为键,在它所维护的 channel 字典中查找记录了订阅这
个频道的所有客户端的链表,遍历这个链表,将消息发布给所有订阅者。

给作者买杯咖啡吧~~~