当前位置:网站首页>Redis队列

Redis队列

2022-06-12 06:01:00 心寒丶

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 ...]],如果没有参数则会退订所有规则。

原网站

版权声明
本文为[心寒丶]所创,转载请带上原文链接,感谢
https://crush-hj.blog.csdn.net/article/details/125202737