您当前的位置:首页 > 电脑百科 > 数据库 > Redis

Redis消息队列:RPOPLPUSH vs Pub/Sub

时间:2019-11-14 10:03:49  来源:  作者:

redis内存数据库而闻名。但是,某些系统将它用作消息队列管理工具。

Pub/Sub 和 RPOPLPUSH 是用于实现这样一个系统的两组命令。在这篇文章中,我将分享一些关于这两个命令集的知识,它们的用例以及优缺点。

Redis消息队列:RPOPLPUSH vs Pub/Sub

 

PUBLISH/SUBSCRIBE

假设 Pub/Sub 就像一个无线电台,所有订阅队列的使用者都将接收发布到该队列的所有消息。

它是如何工作的

消费者 C1、C2、C3 订阅队列 q

生产者 P 将消息m发布到队列 q

队列 q 向所有消费者 C1、C2、C3 发送消息

Redis消息队列:RPOPLPUSH vs Pub/Sub

 

例子

群聊系统是这种消息队列类型的典型例子,其中用户向一个组发送消息,所有其他组成员都需要接收该消息。Pub/Sub 是一个很好的工具,可以确保消息传递给所有订阅者。

什么时候不使用

由于内存缓冲区的效率,如果消费者失去了与队列的连接,那么消费者很有可能在连接丢失时丢失消息。Redis服务器决定清除消息缓冲区,为下一个传入的消息节省更多的内存。

RPOPLPUSH

RPOPLPUSH(可靠队列模式)的工作方式不同。消息队列管理的实现来自客户机,而不是Redis服务器。

它是如何工作的

队列 q 是 Redis 中的一个列表。

生产者 P LPUSH 消息 m1, m2, m3 到列表 q。

消费者 C1 通过使用命令 RPOPLPUSH 从列表 q 中弹出消息 m1 来消费来自列表 q 的消息,同时将该消息推送到另一个工作列表 q-c1-working。

如果 C1 成功使用 m1,它会将消息 m1 从工作列表 q-c1-working 中删除。

如果 C1 未能使用该消息,根据业务逻辑,它将:消息 m1 重新排队到原始队列 q 或者拒绝消息 m1,将其移动到拒绝队列 q-rejected。

消费者 C2、C3 依次处理与 C1 相同的流中的消息,但处理的消息不同。只有一个使用者成功地使用了一个特定的消息。

Redis消息队列:RPOPLPUSH vs Pub/Sub

 

例子

这种机制在一个消息被一个且只有一个消费者成功消费的情况下非常有用。

什么时候不使用

此过程至少创建 3 个队列:主队列、工作队列、拒绝队列。此外,每个消费者都有自己的工作队列。当查看队列列表时,有点错综复杂。



Tags:Redis 消息队列   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
索引: 基于list的实现方式 基于publish/subscribe 实战消息队列简介消息队列:是消息的顺序集合。 比如网站的PV统计和查看,传统方式就是每个页面发一个AJAX然后mysql给PV+1。用...【详细内容】
2020-01-02  Tags: Redis 消息队列  点击:(85)  评论:(0)  加入收藏
Redis以内存数据库而闻名。但是,某些系统将它用作消息队列管理工具。Pub/Sub 和 RPOPLPUSH 是用于实现这样一个系统的两组命令。在这篇文章中,我将分享一些关于这两个命令集的...【详细内容】
2019-11-14  Tags: Redis 消息队列  点击:(111)  评论:(0)  加入收藏
▌简易百科推荐
来源: my.oschina.net/xiaomu0082/blog/2990388首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应...【详细内容】
2021-12-08  Java识堂    Tags:Redis   点击:(18)  评论:(0)  加入收藏
我不知道为什么你会选择对特定数量的“错误”(或警告)如此具体。听起来您正在寻找将要发布到 Yahoo! 的某些文章的内容。 Insider (N Foos to Blah for the BlahBlah)。那说:...【详细内容】
2021-12-07  富集云科技有限公司    Tags:Redis   点击:(14)  评论:(0)  加入收藏
目录 一、背景 二、步骤 0.理论支持 1、获取数据 2、结果 3、分析数据并评估大小 三、关于repl-backlog-size 一、背景 repl-backlog-size控制这个环形缓冲区. ​ 主从断...【详细内容】
2021-11-05  弈秋的美好生活    Tags:redis   点击:(41)  评论:(0)  加入收藏
Redis 性能测试是通过同时执行多个命令实现的。1,Redis-benchmarkRedis性能命令:redis性能命令格式: redis-benchmark [option] [option value] redis 性能测试工具可选参数如...【详细内容】
2021-11-02  川石信息    Tags:Redis   点击:(41)  评论:(0)  加入收藏
1 概述数据结构和内部编码 无传统关系型数据库的 Table 模型schema 所对应的db仅以编号区分。同一 db 内,key 作为顶层模型,它的值是扁平化的。即 db 就是key的命名空间。 key...【详细内容】
2021-11-01  JavaEdge    Tags:Redis   点击:(28)  评论:(0)  加入收藏
普通java中使用引用Java redis 驱动,即可连接:import redis.clients.jedis.Jedis; public class RedisTestJava { public static void main(String[] args) { //连...【详细内容】
2021-10-13  faesuite    Tags:Redis   点击:(34)  评论:(0)  加入收藏
Redis常用的数据结构有 string list set zset hashstringstring 是 Redis 的基本的数据类型,一个 key 对应一个 value。string 类型是二进制安全的,Redis的string可以包含任...【详细内容】
2021-10-12  语霖    Tags:Redis   点击:(36)  评论:(0)  加入收藏
列表类型可以存储一组按插入顺序排序的字符串,它非常灵活,支持在两端插入、弹出数据,可以充当栈和队列的角色。> LPUSH fruit apple(integer) 1> RPUSH fruit banana(integer)...【详细内容】
2021-09-17  深夜敲代码    Tags:Redis   点击:(54)  评论:(0)  加入收藏
Redis持久化意义 是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去,比如你的redis整个挂了,然后redis就不可用了,你要做的事情是让redis变得可用,尽快变得可用 大量的请...【详细内容】
2021-08-12  小李说IT    Tags:Redis   点击:(77)  评论:(0)  加入收藏
当查询Redis中没有的数据时,该查询会下沉到数据库层,同时数据库层也没有该数据,当这种情况大量出现或被恶意攻击时,接口的访问全部透过Redis访问数据库,而数据库中也没有这些数据...【详细内容】
2021-07-30  随便t    Tags:缓存穿透   点击:(91)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条