发布与订阅
除了可以使用List(列表)来实现消息队列,Redis也提供了发布订阅功能,可用于消息的传递。Redis的发布订阅包括三个部分:发布者、订阅者、频道(Channel)。发布者推送消息至频道,订阅了该频道的订阅者都可以接收到该消息。其中发布者和订阅者都为客户端,Channel为服务端。
虽然与大多数专业消息队列系统(例如kafka)相比,在功能性上多有不足,不支持消息堆积和回溯。但其足够简单,在要求不是很高的场景下可以使用。
发布消息
|
|
publish会向channel发送message消息
订阅频道
|
|
订阅者可以订阅一个或多个频道,客户端在订阅之后进入了订阅状态,只能接收subscribe、psubscribe、unsubscribe、punsubscribe四个命令,新的订阅客户端无法接收到订阅前的消息。
取消订阅
|
|
客户端可以通过unsubscribe命令取消对指定频道的订阅,取消后将不再接收消息。
按模式订阅
Redis提供了支持glob风格的订阅命令psubscribe何取消命令punsubscribe。例如下列操作订阅以ch开头的所有频道
|
|
查询订阅
|
|
查询所有至少包含一个订阅者的频道,pattern可以指定模式
|
|
查看频道订阅的客户端数量
|
|
查看模式订阅的客户端数量
Keyspace Notification
Redis同时提供了Keyspace Notification的功能,允许客户端订阅特定的频道,接收内部数据改变的事件。例如在删除键mykeys时,会触发两条消息:mykeys del和del mykeys,前者属于keyspace频道表示数据的变化,后者属于keyevent频道表示执行的操作。
设置参数同时订阅keyspace和keyevent频道
|
|
订阅所有频道
|
|
操作数据
|
|
订阅客户端收到信息
|
|