redis订阅发布
订阅发布
pub/sub
指的是pulish
发布与subscribe
订阅.在redis
中,他是一种消息通信模式:发送者pub
消息,订阅者sub
接受消息.redis
的客户端可以订阅任意数量的频道.这个功能最明显的用法就是构建实时消息系统,比如普通的即时聊天,群聊等功能.还可以用在门户网站,当编辑更新了某推荐板块的内容后,
CMS
发布清除缓存的消息到channel
(发送者pub
消息),门户网站的缓存系统通过channel
接收到消息(订阅者sub
消息)后,更新推荐板块的缓存.
1.框架
当有像消息
publish
到频道channel1
时,这个消息就会发送给订阅它的客户端.
2.常用命令
命令 描述 psubscribe pattern [pattern]
订阅一个或多个符合给定模式的频道 pubsub <subcommand> [argument [argument]]
查看订阅与发布系统状态 publish channel message
将消息发送给指定的频道 punsubscribe [pattern [pattern]]
退订所有给定模式的频道 subscribe channel [channel]
订阅给定的一个或多个频道的信息 unsubscribe channel [channel]
退订给定的频道
3.实例
############################ 订阅模式 ############## # psubscribe pattern [pattern] 订阅一个或多个符合给定模式的频道 # 每个模式以 * 作为匹配符,比如 it.* 匹配所有的以 it 开头的频道 (it.news,it.blog 等) # 以下有2个发送消息redis-cli客户端 # 订阅客户端 client1:6379> psubscribe new.* Reading messages... (press Ctrl-C to quit) 1) "psubscribe" # 返回值的类型:表示订阅成功 2) "new.*" # 订阅的模式 3) (integer) 1 # 订阅模式的数量 # 发送客户端1 send1:6379> publish new.test1 "from new.test1" (integer) 1 # 发送客户端2 send2:6379> publish new.test2 'from test2' (integer) 1 # 订阅客户端 127.0.0.1:6379> psubscribe new.* Reading messages... (press Ctrl-C to quit) 1) "psubscribe" 2) "new.*" 3) (integer) 1 1) "pmessage" # 返回值的类型 2) "new.*" # 信息匹配的模式 3) "new.test1" # 信息本身的目标频道 4) "from new.test1" # 信息的内容 1) "pmessage" 2) "new.*" 3) "new.test2" 4) "from test2" #################### 查看状态 ################### # client-1 订阅 news.it 和 news.sport 两个频道 client-1> SUBSCRIBE news.it news.sport Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "news.it" 3) (integer) 1 1) "subscribe" 2) "news.sport" 3) (integer) 2 # client-2 订阅 news.it 和 news.internet 两个频道 client-2> SUBSCRIBE news.it news.internet Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "news.it" 3) (integer) 1 1) "subscribe" 2) "news.internet" 3) (integer) 2 # 首先, client-3 打印所有活跃频道 # 注意,即使一个频道有多个订阅者,它也只输出一次,比如 news.it client-3> PUBSUB CHANNELS 1) "news.sport" 2) "news.internet" 3) "news.it" # 接下来, client-3 打印那些与模式 news.i* 相匹配的活跃频道 # 因为 news.sport 不匹配 news.i* ,所以它没有被打印 redis> PUBSUB CHANNELS news.i* 1) "news.internet" 2) "news.it" # client-1 订阅 news.it 和 news.sport 两个频道 client-1> SUBSCRIBE news.it news.sport Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "news.it" 3) (integer) 1 1) "subscribe" 2) "news.sport" 3) (integer) 2 # client-2 订阅 news.it 和 news.internet 两个频道 client-2> SUBSCRIBE news.it news.internet Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "news.it" 3) (integer) 1 1) "subscribe" 2) "news.internet" 3) (integer) 2 # client-3 打印各个频道的订阅者数量 client-3> PUBSUB NUMSUB news.it news.internet news.sport news.music 1) "news.it" # 频道 2) "2" # 订阅该频道的客户端数量 3) "news.internet" 4) "1" 5) "news.sport" 6) "1" 7) "news.music" # 没有任何订阅者 8) "0" # client-1 订阅 news.* 和 discount.* 两个模式 client-1> PSUBSCRIBE news.* discount.* Reading messages... (press Ctrl-C to quit) 1) "psubscribe" 2) "news.*" 3) (integer) 1 1) "psubscribe" 2) "discount.*" 3) (integer) 2 # client-2 订阅 tweet.* 一个模式 client-2> PSUBSCRIBE tweet.* Reading messages... (press Ctrl-C to quit) 1) "psubscribe" 2) "tweet.*" 3) (integer) 1 # client-3 返回当前订阅模式的数量为 3 client-3> PUBSUB NUMPAT (integer) 3 # 注意,当有多个客户端订阅相同的模式时,相同的订阅也被计算在 PUBSUB NUMPAT 之内 # 比如说,再新建一个客户端 client-4 ,让它也订阅 news.* 频道 client-4> PSUBSCRIBE news.* Reading messages... (press Ctrl-C to quit) 1) "psubscribe" 2) "news.*" 3) (integer) 1 # 这时再计算被订阅模式的数量,就会得到数量为 4 client-3> PUBSUB NUMPAT (integer) 4 ################## 退订 ################ # PUNSUBSCRIBE [pattern [pattern ...]] # 如果没有模式被指定,也即是,一个无参数的 PUNSUBSCRIBE 调用被执行,那么客户端使用 PSUBSCRIBE 命令订阅的所有模式都会被退订。在这种情况下,命令会返回一个信息,告知客户端所有被退订的模式。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 WenYan Blog!
评论