使用LPUSH和RPOP命令实现队列, 这里介绍一个新命令BRPOP和BLPOP BRPOP key [key ...] timeout(s) BRPOP命令和RPOP命令相似,唯一的区别是当列表中没有元素时BRPOP命令会一直阻塞住连接,直到有新元素加入
利用BRPOP命令可以检测多个key的功能。如果多个键都有元素,则按照从左到右顺序取第一个键中的一个元素。因此,要实现优先级队列,把优先级高的key放到前面就ok了。
命令 | 描述 |
---|---|
PUBLISH channel msg | 发布消息. 接收到这条消息的订阅者数量. 发出去的消息不会被持久化,也就是说当有客户端订阅channel后只能收到后续发布到该频道的消息,之前发送的就收不到了 |
SUBSCRIBE channel [channel ...] | 订阅频道,可以同时订阅多个频道 |
UNSUBSCRIBE [channel ...] | 取消订阅指定的频道, 如果不指定频道,则会取消订阅所有频道 |
PSUBSCRIBE pattern [pattern ...] | 订阅一个或多个符合给定模式的频道 |
PUNSUBSCRIBE [pattern [pattern ...]] | 退订指定的规则, 如果没有参数则会退订所有规则 |
PUBSUB subcommand [argument [argument ...]] | 查看订阅与发布系统状态 |
注意
进入订阅状态后客户端可能收到三种类型的回复。 每种类型的回复都包含3个值,
消息类型(第一个值) | 第二个值 | 第三个值 |
---|---|---|
subscribe:表示订阅成功的反馈信息 | 订阅成功的频道名称 | 当前客户端订阅的频道数量 |
message:表示接收到的消息 | 产生消息的频道名称 | 消息的内容 |
unsubscribe:表示成功取消订阅某个频道 | 对应的频道名称 | 当前客户端订阅的频道数量 |
第一个值为unsubscribe, 当第三个值为0时客户端会退出订阅状态,之后就可以执行其他非“发布/订阅”模式的命令了
示例:
redis A>SUBSCRIBE channel.1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel.1"
3) (integer) 1
# PSUBSCRIBE 按规则订阅
redis C>PSUBSCRIBE channel.?*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "channel.?*"
3) (integer) 1
redis B>PUBLISH channel.1 hi!
(integer) 2
#此时,C接收到回复
1) "pmessage"
2) "channel.?*" # 注意回复多了一个值,第二个值为订阅时使用的通配符
3) "channel.1"
4) "hi!"
规则channel.?*可以匹配channel.1和channel.10,但不会匹配channel.。
如果发现错误,请轻拍,欢迎留言交流,谢谢
原文地址:http://blog.csdn.net/wzzfeitian/article/details/42081645