Redis可以实现消息队列么?实现的方式是什么?

Redis可以通过List和发布订阅模式以及Stream三种方式实现消息队列。

通过List实现消息队列

redis可以通过它的List数据结构实现消息队列,原理是该数据结构可以实现队列的特性,从一端插入数据,从另一端取出数据。

那么对于生产者我们就可以通过Lpush操作来向队列中添加消息,消费者通过BRpoll操作来从队列中获取信息。

通过发布订阅者模式来实现消息队列

Redis中的每个Client都可以订阅一个Channel,当有消息向Channel中发送时订阅者就能够自动接收的该消息,那么我们可以让生产者向该频道发送消息,让所有的消费者订阅该频道,这样就可以实现消息队列,但是如果没有消费者订阅该频道的话,那么生产者发送的消息都会丢失。

通过Stream的方式实现消息队列

Stream中设置了消费者组的概念,在消费消息之前首先需要创建一个消费者组,在消费者组里面添加客户端,消息可以被多个消费者组获取,但是在消费者组中的客户端是竞争获取一条消息。通过这样的方式可以实现一个消息队列,而且通过这种方式实现的消息队列是可靠的,因为每个消息都有一个消息ID,由时间戳和序列号组成,用户可以自定义但是格式要相同,在每个消费者组里面维护了两个字段,分别是last_deliver_id和pending_id,他的的作用分别是记录消费者最后获取的那条消息的id,pendinglist记录的是正在处理的消息的id,当消费者组接收到一条消息时首先会将lastdiliverid设置为该id,然后将消息添加到pendinglist中给我们的程序进行处理,程序处理完毕后会要求redis去确认该条消息,然后该消息就会从pendingist中删除,我们的补偿服务会定期查询pendinglist中是否由=有长时间未确认的服务,然后就会走补偿逻辑去处理这条消息,然后确认。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值