十四、Redis进阶-Redis“发布/订阅”模式
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis中提供了一组命令可以轻松实现“发布/订阅”模式。“发布/订阅”模式可以实现进程间的消息传递,原理如下:
发布订阅模式中包含两种角色,分别是发布者和订阅者。订阅者可以订阅一个或多个频道(channel),发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都会接收到此消息。
发布订阅命令
psubscribe 订阅一个或多个频道
语法:psubscribe pattern [pattern ...]
每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等)。 news.* 匹配所有以 news. 开头的频道( news.it 、 news.global.today 等等)
pubsub 查看订阅与发布系统状态
语法:pubsub subcommand [arg [arg ...]]
publish 将信息发送到指定的频道
127.0.0.1:6379> publish channel1.1 hello
(integer) 0
该命令返回接收到这条消息的订阅者数量。
语法:publish channel message
punsubscribe 定退所有给定模式的频道
语法:punsubscribe [pattern [pattern ...]]
unsubscribe 退订给定的一个或多个频道的信息
语法:unsubscribe [channel [channel ...]]
subscribe 订阅给定的一个或多个频道
语法:subscribe channel [channel ...]
# 新开窗口B
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel.1"
3) (integer) 1
1) "message"
2) "channel.1"
3) "hello world"
# 窗口A
127.0.0.1:6379> publish channel.1 'hello world'
(integer) 1
进入订阅后的客户端可能收到3种类型的回复。每种类型的回复都包含3个值,第一个值是消息的类型,根据消息类型的不同,第二、三个值的含义也不同。消息类型可能的取值有以下3个:
1)subscribe表示订阅成功的反馈消息。第二值是订阅成功的频道名称,第三个值是当前客户端的频道数量。
2)message这是我们最需要关心的类型,表示接收到的消息。第二值表示产生消息的频道名称,第三个值是消息的内容。
3)unsubscribe表示成功取消订阅某个频道。第二个值是对应的频道名称,第三个值是当前客户端订阅的频道数量,当值为0时客户端会退出订阅状态,之后就可以执行其他非“发布/订阅”模式的命令。
按照规则订阅
新开窗口C
# 窗口C
127.0.0.1:6379> psubscribe channel.?*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "channel.?*"
3) (integer) 1
# 窗口A 发布消息
127.0.0.1:6379> publish channel.1 'hi qin'
(integer) 2
# 窗口C接收
127.0.0.1:6379> psubscribe channel.?*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "channel.?*"
3) (integer) 1
1) "pmessage"
2) "channel.?*"
3) "channel.1"
4) "hi qin"