Redis(五)-特性-消息队列

Redis(五)-特性-消息队列,第1张

消息队列要能支持组件通信消息的快速读写,而Redis本身支持数据的高速访问,正好可以满足消息队列的读写性能需求。另外,消息队列在存取消息时,必须要满足三个需求:

针对消息队列的需求,本节就来分析下Redis实现消息队列的方案

BLPOP :队列为空时阻塞

LPUSH :队列满时阻塞

BRPOPLPUSH :取出消费同时保存到另外一个备份list

从消息有序性、唯一性、可靠性三个方面分析是否可行

为了解决可靠性问题可以使用BRPOPLPUSH

当consumer故障恢复后可以从备份队列中取出消息进行处理

Streams是Redis专门为消息队列设计的数据类型,它提供了丰富的消息队列 *** 作命令;

XADD :插入消息,消息的格式是键-值对形式,保证有序,可以自动生成全局唯一ID;

XREAD :用于读取消息,可以按ID读取数据;

XREADGROUP :按消费组形式读取消息;

XPENDING :用来查询每个消费组内所有消费者已读取但尚未确认的消息

XACK :用于向消息队列确认消息处理已完成

-------- over ---------

redis只是提供一个高性能的、原子 *** 作的分布式队列实现。具体的业务还是得需要你自己定制。

你的需求实际上是一个变形的生产者-消费者实现。

对于此类需求,主要是将请求和实际的处理过程解耦,一般都是采取异步的方式来通知请求方,这跟用不用redis其实没有多大的关系。一般的实现方法是你需

要将用户的请求封装成一个Task,然后将这个Task再push到redis队列,然后后端的workerphp完全可以多进程、多线程的并发处理

Task并将处理结果回调给请求方。这里唯一麻烦点的就是这个Task的设计,需要能够包含请求信息(请求内容,请求方标识等等)

如果使用的是lpush让队列中存入消息,那么消费者直接blpop从队列取消息即可,因为blpop是阻塞式的,你设置一个超时时间,超时时间内如果有消息进来会自动获取到,如果没有则结束等待,外面使用一个循环即可。

以上就是关于Redis(五)-特性-消息队列全部的内容,包括:Redis(五)-特性-消息队列、redis怎么做消息队列、怎么监听 redis的list 队列等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9536364.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存