千家信息网

redis实现消息队列的方法

发表于:2024-10-18 作者:千家信息网编辑
千家信息网最后更新 2024年10月18日,这期内容当中的小编将会给大家带来有关redis实现消息队列的方法,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。消息队列,Message Queue,常用于解决并发系统中的资源一致
千家信息网最后更新 2024年10月18日redis实现消息队列的方法

这期内容当中的小编将会给大家带来有关redis实现消息队列的方法,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

消息队列,Message Queue,常用于解决并发系统中的资源一致性问题,提升峰值的处理能力,同时保证消息的顺序性、可恢复性、必送达性,对应用进行解耦,或者实现异步通讯等。

市面上的 MQ应用有很多(例如:Kafka,RabbitMQ,Disque),同时也可以基于 Redis 来实现,比较典型的方案有:

基于List的 LPUSH+BRPOP 的实现

PUB/SUB,订阅/发布模式

基于Sorted-Set的实现

基于Stream类型的实现

在消息队列使用中,有生产者producter和消费者consumer。生产者负责生成消息,消费者负责使用处理消息。

生产,指的是将消息放入消息队列。

消费,指的是读取并处理消息。通常一个消息再被消费后,就应该从消息队列中删除。

基于List的 LPUSH+BRPOP 的实现

典型的命令为:

LPUSH,将消息队列BRPOP,从队列中取出消息,阻塞模式

就是一个典型的基于FIFL队列的解决方案。其中LPUSH是生产者做的事,而BRPOP是消费者做的事。

该模式有很多优点:

实现简单

Reids支持持久化消息,意味着消息不会丢失,可以重复查看(注意不是消费,只看不用,LRANGE类的指令)。

可以保证顺序,保证使用LPUSH命令,可以保证消息的顺序性

使用RPUSH,可以将消息放在队列的开头,达到优先消息的目的,可以实现简易的消息优先队列。

同时也有些劣势:

做消费确认ACK比较麻烦,就是不能保证消费者在读取之后,未处理后的宕机问题。导致消息意外丢失。通常需要自己维护一个Pending列表,保证消息的处理确认。

不能做广播模式,例如典型的Pub/Discribe模式。

不能重复消费,一旦消费就会被删除

不支持分组消费,需要自己在业务逻辑层解决

PUB/SUB,订阅/发布模式

SUBSCRIBE,用于订阅信道PUBLISH,向信道发送消息UNSUBSCRIBE,取消订阅

生产者和消费者通过相同的一个信道(Channel)进行交互。信道其实也就是队列。通常会有多个消费者。多个消费者订阅同一个信道,当生产者向信道发布消息时,该信道会立即将消息逐一发布给每个消费者。可见,该信道对于消费者是发散的信道,每个消费者都可以得到相同的消息。典型的对多的关系。

典型的优点是:

典型的广播模式,一个消息可以发布到多个消费者

多信道订阅,消费者可以同时订阅多个信道,从而接收多类消息

消息即时发送,消息不用等待消费者读取,消费者会自动接收到信道发布的消息

也有些缺点:

消息一旦发布,不能接收。换句话就是发布时若客户端不在线,则消息丢失,不能寻回

不能保证每个消费者接收的时间是一致的

若消费者客户端出现消息积压,到一定程度,会被强制断开,导致消息意外丢失。通常发生在消息的生产远大于消费速度时

可见,Pub/Sub 模式不适合做消息存储,消息积压类的业务,而是擅长处理广播,即时通讯,即时反馈的业务。

基于SortedSet有序集合的实现

ZADD KEY score member,压入集合ZRANGEBYSCORE,依据score获取成员

有序集合的方案是在自己确定消息顺ID时比较常用,使用集合成员的Score来作为消息ID,保证顺序,还可以保证消息ID的单调递增。通常可以使用时间戳+序号的方案。确保了消息ID的单调递增,利用SortedSet的依据Score排序的特征,就可以制作一个有序的消息队列了。

和上面的方案相比,优点就是可以自定义消息ID,在消息ID有意义时,比较重要。缺点也明显,不允许重复消息(以为是集合),同时消息ID确定有错误会导致消息的顺序出错。

所以,若不是需要自定义消息ID,这个方案好像有点鸡肋…

基于 Stream 类型的实现

这个Stream类型redis就是为了实现消息队列的。支持自动生成消息ID,分组消费,ACK,消息转移,队列监控等核心消息队列功能

上述就是小编为大家分享的redis实现消息队列的方法了,如果您也有类似的疑惑,不妨碍参照上述分析进行理解。如果想了解更多相关内容,请关注行业资讯。

消息 消费 队列 消费者 信道 模式 保证 典型 订阅 就是 方案 处理 生产 同时 顺序 多个 生产者 有序 业务 优点 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全家校互动活动简讯 服务器普通话软件教师端连接不上 网络安全研究生都在做什么 饥荒进入服务器后怎么换人物 全宽服务器 十堰市鹏程网络技术有限公司 厦门威尔顺网络技术有限公司 网络安全群众性讨论辨析 蓝思网络技术待遇 武汉售后完善的计算机软件开发 fm2019传奇数据库 全境封锁2一直登录不上服务器 dump文件到本地数据库 正宗网络安全龙头股 忻州民宿软件开发 redis转移数据库 集团公司网络安全工作的原则 软件开发的培训机构有哪些 软件开发技术研究报告 长宁区智能化软件开发常见问题 万德数据库下载 健康支付宝未找到数据库 从数据库加载玩家数据失败 电脑服务器一般装什么系统 锐思数据库提供的衍生指标 高中网络技术应用知识点汇总 怀柔区制造软件开发推荐 青浦区企业软件开发价目 南京java软件开发机构 域名可以设置两个不同的服务器吗
0