任务队列
使用LPUSH和RPOP命令操作列表来实现队列
BLPOP key [key ...] timeout(s)
BRPOP key [key ...] timeout(s)
BLPOP/BRPOP是阻塞式,同时检测多个键,如果所有键都没有元素则阻塞,如果其中有一个键有元素则会从该键中弹出元素,返回值为键名和对应的元素值。
如果多个键都有元素则按照从左到右的顺序取第一个键中的一个元素,借此特性可以实现优先级队列。
发布/订阅模式
“发布/订阅”模式中包含两种角色,分别是发布者和订阅者。订阅者可以订阅一个或者若干个频道(channel),而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都会收到此消息。
发布者发布消息的命令是PUBLISH,用法是PUBLISH channelmessage,返回值是接收到这条消息的订阅者数量
redis B> PUBLISH channel.1 hi
(integer)0
发送出去的消息不会被持久化,也就是说当有客户端订阅channel.1后只能收到后续发布到该频道的消息,之前发送的消息就收不到了。
订阅频道的命令是SUBSCRIBE,可以同时订阅多个频道,用法是SUBSCRIBE channel [channel ...]
redis A> SUBSCRIBE channel.1
Readingmessages...(press Ctrl-C to quit)
- "subscribe"
- "channel.1"
- (integer) 1
执行SUBSCRIBE命令后客户端会进入订阅状态,处于此状态下客户端不能使用除SUBSCRIBE/UNSUBSCRIBE/PSUBSCRIBE/PUNSUBSCRIBE这4个属于“发布/订阅”模式的命令之外的命令,否则会报错。
进入订阅状态后,客户端可能会收到三种类型的回复。每种类型的回复都包含3个值,第一个值是消息类型,根据消息类型不同,第二个和第三个值的含义不同。消息类型的可能取值有:
1)Subscribe。表示订阅成功的反馈信息。第二个值是订阅成功的频道名称,第三个值是当前客户端订阅频道的数量。
2)message。这个类型的回复是我们最关心的,它表示接收到的消息。第二个值表示产生此消息的频道名称,第三个值是消息内容。
3)unsubscribe。表示成功取消订阅某个频道。第二个值是对应的频道名称,第三个值是当前客户端订阅的频道数量,当此值为0时,客户端会退出订阅状态,之后就可以执行其他非“发布/订阅”模式的命令了。
按照规则订阅
PSUBSCRIBE命令订阅指定的规则。规则支持glob风格通配符格式。PSUBSCRIBE pattern [pattern ...]
redis C> PSUBSCRIBE channel.?*
Readingmessages... (press Ctrl-C to quit)
- "psubscribe"
- "channel.?*"
- (integer) 1
回复:
- "psubscribe"
- "channel.?*"
- "channel.1"
- "hi!"
第一个值表示这条消息是通过PSUBSCRIBE命令订阅频道而收到的,第二个值表示订阅时使用的通配符,第三个值表示实际收到消息的频道名称,第四个值则是消息内容。
PUNSUBSCRIBE pattern [pattern ...]退订指定的规则,如果没有参数,则会退订所有规则。
使用PUNSUBSCRIBE命令只能退订通过PSUBSCRIBE命令订阅的规则,不会影响直接通过SUBSCRIBE命令订阅的频道;同样的是UNSUBSCRIBE命令。