Redis实现任务队列 BRPOP
BRPOP命令和RPOP命令相似,唯一的区别是当列表中没有元素时BRPOP命令会一直阻塞住连接,直到有新元素加入。
BRPOP命令接收两个参数,第一个是键名,第二个是超时时间,单位是秒。当超过了此时间仍然没有获得新元素的话就会返回nil。上例中超时时间为"o",表示不限制等待的时间,即如果没有新元素加入列表就会永远阻塞下去。当获得一个元素后 BRPOP命令返回两个值,分别是键名和元素值。
除了BRPOP命令外,Redis还提供了BLPOP,和 BRPOP的区别在与从队列取元素时BLPOP会从队列左边取。具体可以参照工POP理解。
redis-cli实例1 :输入 BRPOP开启等待:
redis-cli实例2:向testqueue中写入数据:
redis-cli实例1 :返回数据:
发布/订阅模式PUBLISH
“发布/订阅”模式中包含两种角色,分别是发布者和订阅者。订阅者可以订阅一个或若干个频道(channel),而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都会收到此消息。
发布者发布消息的命令是 PUBLISH,用法是PUBLISH channel message,这样消息就发出去了。PUBLISH命令的返回值表示接收到这条消息的订阅者数量。如果没有客户端订阅channel则返回0。发出去的消息不会被持久化,也就是说当客户端订阅channel后只能收到后续发布到该频道的消息,之前发送的就收不到了。订阅频道的命令是SUBSCRIBE,可以同时订阅多个频道,用法是 SUBSCRIBEchannel [channel ...]。
redis-cli实例1 :用来订阅channelTest
进入订阅状态后客户端可能收到3种类型的回复。每种类型的回复都包含3个值,第一个值是消息的类型,根据消息类型的不同,第二、三个值的含义也不同。消息类型可能的取值有以下3个。
(1) subscribe。表示订阅成功的反馈信息。第二个值是订阅成功的频道名称,第三个值是当前客户端订阅的频道数量。
(2) message。这个类型的回复是我们最关心的,它表示接收到的消息。第二个值表示产生消息的频道名称,第三个值是消息的内容。
(3) unsubscribe。表示成功取消订阅某个频道。第二个值是对应的频道名称,第三个值是当前客户端订阅的频道数量,当此值为0时客户端会退出订阅状态,之后就可以执行其他非“发布/订阅”模式的命令了。
redis-cli实例2 :向channelTest写入一条消息,因为redis-cli实例1已经订阅,所以返回1
redis-cli实例1:自动收到消息
使用UNSUBSCRIBE命令可以取消订阅指定的频道,用法为UNSUBSCRIBE [ channel[ channel ...]],如果不指定频道则会取消订阅所有频道。
按照规则订阅SUBSCRIBE
除了可以使用SUBSCRIBE命令订阅指定名称的频道外,还可以使用PSUBSCRIBE命令订阅指定的规则。规则channel.?*可以匹配channel.1和channel.10,但不会匹配 channel.。
redis-cli实例3:订阅channelTes?*
redis-cli实例2:写入数据 返回2,因为 redis-cli1和 redis-cli3都订阅,因此发送两条
redis-cli实例3:收到信息
第一个值表示这条消息是通过PSUBSCRIBE命令订阅频道而收到的,第二个值表示订阅时使用的通配符,第三个值表示实际收到消息的频道命令,第四个值则是消息内容。
PUNSUBSCRIBE命令可以退订指定的规则,用法是 PUNSUBSCRIBE [pattern[pattern ...]],如果没有参数则会退订所有规则。