首页 » Web前端 » phpredis队列订阅技巧_Redis队列二消息的宣告与订阅PubSub的运用

phpredis队列订阅技巧_Redis队列二消息的宣告与订阅PubSub的运用

访客 2024-12-06 0

扫一扫用手机浏览

文章目录 [+]

发布订阅模式

在之前的文章中先容了利用Redis列表这种数据类型来实现一个轻量级的行列步队,不过利用列表实现的行列步队存在一个毛病便是由于是基于列表实现,以是出行列步队之后则不再存在,以是只能被一个消费者消费一次,不支持多个不同的消费者各消费一次,即不支持广播。
为了实现行列步队常见的发布订阅PubSub模式,在Redis中供应了的发布与订阅实现,即生产者客户端可以往某个指定的频道channel或者模式pattern发布一个,然后将这个广播给多个订阅了这个频道channel的客户端或者广播给订阅了该匹配的某个模式pattern的客户端。
以是Redis供应的是的发布与订阅,不是传统的行列步队实现,发布的并不会被存储,如Redis基于列表实现的行列步队会在消费之前存放在列表的链表数据构造里。
Redis供应的订阅发布是实时的发布和订阅吸收,如果所发往的频道channel或者模式pattern没有订阅者,则该条不会传给任何其他客户端,直接过掉或者说丢弃掉。

轻量级实现

phpredis队列订阅技巧_Redis队列二消息的宣告与订阅PubSub的运用

Redis所供应的订阅发布,可以理解为是一个轻量级的订阅发布实现,所谓轻量级是相对付RabbitMQ和Kafka这种专业的行列步队所供应的订阅发布而言的,即RabbitMQ和Kafka须要在做事器单独配置和启动做事端Broker进程来吸收客户真个写入和读取消费,而Redis的订阅发布由于是Redis内置的,由于在项目中常日会利用Redis作为分布式缓存实现,以是不须要进行其他额外的配置和支配。
以是如果项目中刚开始没有利用RabbitMQ这种专业的行列步队,而项目后期又须要对项目进行解耦,须要用到的订阅发布功能,同时不想额外在生产做事器申请资源来支配RabbitMQ或者Kafka,则可以直策应用作为缓存的Redis所供应的发布订阅功能。
个中的发布订阅模式的一个运用处景为为了性能方面的考虑,一个做事的多个支配实例利用本地缓存来缓存数据(不常更新),由于客户端可能连接任意一个支配实例,并对这个缓存进行更新,所以为了实现不同支配实例间确当地缓存数据同步,则这多个支配可以订阅同一个channel,当某个实例吸收到客户真个更新要求时,更新后发布到该channel,从而关照到订阅了这个channel的其他支配实例。

二、利用方法

phpredis队列订阅技巧_Redis队列二消息的宣告与订阅PubSub的运用
(图片来自网络侵删)
在利用层面,紧张包括对频道channel的精确订阅和对模式pattern的模糊匹配订阅。

基于Redis命令行利用

以下基于Redis的命令行对的订阅与发布功能进行演示,个中包含订阅频道channel和订阅模式pattern两种用法。

1.订阅频道channel

1.如下首先在一个命令行订阅名为testChannel的频道,壅塞等待:

127.0.0.1:6379> SUBSCRIBE testChannelReading messages... (press Ctrl-C to quit)1) \"大众subscribe\"大众2) \"大众testChannel\"大众3) (integer) 1

2.然后在其余一个命令行往testChannel频道发布一个:

127.0.0.1:6379> PUBLISH testChannel \公众hello\公众(integer) 1

3.在之前的订阅命令行吸收到了这个发布的,并且连续壅塞等待:

127.0.0.1:6379> SUBSCRIBE testChannelReading messages... (press Ctrl-C to quit)1) \"大众subscribe\公众2) \"大众testChannel\"大众3) (integer) 11) \"大众message\"大众2) \"大众testChannel\"大众3) \公众hello\"大众

2.订阅模式pattern

订阅模式紧张是模糊匹配,如模式test 则匹配所有以test开头的模式和频道channel,即如果某个客户端订阅了模式 test,则当其余一个客户端往testChannel这个频道发布了一条或者往test 这个模式发布了一条,该客户端会收到,如下订阅test 这个模式pattern,然后利用上面的命令往testChannel这个频道发布一条hello,则该客户端会收到,如下:

127.0.0.1:6379> PSUBSCRIBE testReading messages... (press Ctrl-C to quit)1) \"大众psubscribe\公众2) \公众test\"大众3) (integer) 11) \"大众pmessage\"大众2) \"大众test\"大众3) \"大众testChannel\"大众4) \"大众hello\"大众

基于Java客户端Jedis利用

在Java编程中,可以基于Redis的Java客户端Jedis来对订阅与发布功能进行利用,如果项目利用了spring-data-redis包供应的封装类来利用。
以下利用Jedis进行一个大略演示:

当发布到某个频道channel时,由于模式pattern是模糊匹配,以是如果存在与这个频道channel匹配的pattern,则订阅了这个pattern的客户端也会收到。
由于Jedis的频道吸收subscribe和模式吸收psubscribe都是壅塞方法,以是只有一个会收到并在JedisPubSub方法的回调方法打印,以是在实际编程中,由于是壅塞方法,常日在不同的线程进行分别吸收。
标签:

相关文章

phpmongodb查询排序技巧_MongoDB 排序

在MongoDB中利用利用sort( 方法对数据进行排序,sort( 方法可以通过参数指定排序的字段,并利用 1 和 -1 来指定...

Web前端 2024-12-10 阅读0 评论0