Redis的发布和订阅
什么是发布和订阅
redis发布订阅(pub/sub)是一种消息通信模式:发布者(pub)发布消息,订阅者(sub)接收消息。
redis客户端可以订阅任意数量的频道。
redis的发布和订阅
客户端可以订阅频道如下图:
当给这个频道发布消息后,消息就会发送给订阅的客户端,如下:
发布和订阅常用命令
subscribe:订阅一个或者多个频道
subscribe channel [channel ...]
订阅给定的一个或多个频道的信息。注:channel可以是任意
示例:
127.0.0.1:6379> subscribe msg1 msg2 # 订阅2个频道
Reading messages... (press Ctrl-C to quit)
1) "subscribe" # 返回值的类型:显示订阅成功
2) "msg1" # 订阅的频道名字
3) (integer) 1 # 目前已订阅的频道数量
1) "subscribe" # 返回值的类型:显示订阅成功
2) "msg2" # 订阅的频道名字
3) (integer) 2 # 目前已订阅的频道数量
publish:发布消息到指定的频道
publish channel message
将信息message发送到指定的频道channel。注:另起一个redis客户端测试
示例:
#另起一个redis客户端
127.0.0.1:6379> publish msg1 hello #向msg1频道发送hello
(integer) 1
#第1个redis客户端
1) "message" # 返回值的类型:信息
2) "msg1" # 来源(从那个频道发送过来)
3) "hello" # 信息内容
psubscribe:订阅一个或多个符合给定模式的频道bc
psubscribe pattern [pattern ...]
订阅一个或多个符合给定模式的频道。
每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有以 news. 开头的频道( news.it 、 news.global.today 等等),诸如此类。
示例:
127.0.0.1:6379> psubscribe news.* tweet.*
1) "psubscribe" # 返回值的类型:显示订阅成功
2) "news.*" # 订阅的模式
3) (integer) 1 # 目前已订阅的模式的数量
1) "psubscribe"
2) "tweet.*"
3) (integer) 2
pubsub:查看查看订阅的频道
pubsub <subcommand> [argument [argument ...]]
比如:pubsub 频道名
示例:
127.0.0.1:6379> pubsub channels
1) "msg2"
2) "msg1"
unsubscribe:退订一个或者多个频道
unsubscribe channel [channel ...]
这个命令在不同的客户端中有不同的表现。
示例:
127.0.0.1:6379> unsubscribe msg1
1) "unsubscribe" # 返回值的类型:显示退订
2) "msg1" # 退订的频道名字
3) (integer) 0
解释:
nsubscribe命令不能应用于redis-cli客户端中,因为redis-cli运行订阅后,客户端处于阻塞模式(就是不在redis命令行状态中),只能通过Ctrl-C退出订阅模式,而如果使用第三方组件则可以实现这一功能。
punsubscribe也是使用“punsubscribe news.*”的命令形式来使用的。