Redis 发布订阅
Redis 发布订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。
Redis 有两种发布订阅模式
- 基于频道(Channel)的发布订阅
- 基于模式(Pattern)的发布订阅
关键词:
订阅
、SUBSCRIBE
、PSUBSCRIBE
、PUBLISH
、观察者模式
观察者模式
Redis 发布订阅应用了设计模式中经典的“观察者模式”。
观察者模式(Observer)是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个 “观察” 该对象的其他对象。
- 当一个对象状态的改变需要改变其他对象,或实际对象是事先未知的或动态变化的时,可使用观察者模式。
- 当应用中的一些对象必须观察其他对象时,可使用该模式。但仅能在有限时间内或特定情况下使用。
Redis 订阅模式
Redis 有两种发布订阅模式:
(1)基于频道(Channel)的发布订阅
服务器状态在 pubsub_channels
字典保存了所有频道的订阅关系: SUBSCRIBE
命令负责将客户端和被订阅的频道关联到这个字典里面, 而 UNSUBSCRIBE
命令则负责解除客户端和被退订频道之间的关联。
【示例】订阅指定频道示例
打开客户端一,执行以下命令
1 | SUBSCRIBE first second |
打开客户端二,执行以下命令
1 | PUBLISH second Hello |
此时,客户端一会收到以下内容
1 | 1) "message" |
(2)基于模式(Pattern)的发布订阅
服务器状态在 pubsub_patterns
链表保存了所有模式的订阅关系: PSUBSCRIBE
命令负责将客户端和被订阅的模式记录到这个链表中, 而 UNSUBSCRIBE
命令则负责移除客户端和被退订模式在链表中的记录。
【示例】订阅符合指定模式的频道
打开客户端一,执行以下命令
1 | PSUBSCRIBE news.* |
打开客户端二,执行以下命令
1 | PUBLISH news.A Hello |
打开客户端三,执行以下命令
1 | PUBLISH news.B World |
此时,客户端一会收到以下内容
1 | 1) "pmessage" |
发布订阅命令
Redis 提供了以下与订阅发布有关的命令:
命令 | 描述 |
---|---|
SUBSCRIBE |
订阅指定频道 |
UNSUBSCRIBE |
取消订阅指定频道 |
PSUBSCRIBE |
订阅符合指定模式的频道 |
PUNSUBSCRIBE |
取消订阅符合指定模式的频道 |
PUBLISH |
发送信息到指定的频道 |
PUBSUB |
查看发布订阅状态 |