Redis发布与订阅
发布与订阅
除了可以使用List(列表)来实现消息队列,Redis也提供了发布订阅功能,可用于消息的传递。Redis的发布订阅包括三个部分:发布者、订阅者、频道(Channel)。发布者推送消息至频道,订阅了该频道的订阅者都可以接收到该消息。其中发布者和订阅者都为客户端,Channel为服务端。
虽然与大多数专业消息队列系统(例如kafka)相比,在功能性上多有不足,不支持消息堆积和回溯。但其足够简单,在要求不是很高的场景下可以使用。
发布消息
publish channel message |
publish会向channel发送message消息
订阅频道
subscribe channel [channel ...] |
订阅者可以订阅一个或多个频道,客户端在订阅之后进入了订阅状态,只能接收subscribe、psubscribe、unsubscribe、punsubscribe四个命令,新的订阅客户端无法接收到订阅前的消息。
取消订阅
unsubscribe [channel ...] |
客户端可以通过unsubscribe命令取消对指定频道的订阅,取消后将不再接收消息。
按模式订阅
Redis提供了支持glob风格的订阅命令psubscribe何取消命令punsubscribe。例如下列操作订阅以ch开头的所有频道
127.0.0.1:6379> psubscribe ch* |
查询订阅
pubsub channels [pattern] |
查询所有至少包含一个订阅者的频道,pattern可以指定模式
pubsub numsub [channel ...] |
查看频道订阅的客户端数量
pubsub numprt |
查看模式订阅的客户端数量
Keyspace Notification
Redis同时提供了Keyspace Notification的功能,允许客户端订阅特定的频道,接收内部数据改变的事件。例如在删除键mykeys时,会触发两条消息:mykeys del和del mykeys,前者属于keyspace频道表示数据的变化,后者属于keyevent频道表示执行的操作。
设置参数同时订阅keyspace和keyevent频道
127.0.0.1:6379> config set notify-keyspace-events KEA |
订阅所有频道
127.0.0.1:6379> psubscribe __key*@0__:* |
操作数据
127.0.0.1:6379> set hello world |
订阅客户端收到信息
127.0.0.1:6379> psubscribe __key*@0__:* |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DBA学习记录!