Redis大白话(●三●)

本文详细探讨了Redis中的消息队列实现,包括lpush/rpop、pub/sub和stream,分析了它们的优缺点及解决方案。同时,提到了Kafka在消息队列中的应用,为读者提供了深入理解这两种技术的入口。
摘要由CSDN通过智能技术生成

目录

🧡Redis实现消息队列

lpush&rpop / rpush&lpop

pub&sub(发布订阅)

stream

🧡Kafka实现消息队列


💟这里是CS大白话专场,让枯燥的学习变得有趣!

💟没有对象不要怕,我们new一个出来,每天对ta说不尽情话!

💟好记性不如烂键盘,自己总结不如收藏别人!

🧡Redis实现消息队列

lpush&rpop / rpush&lpop

💌基于List结构实现先进先出队列,生产者lpush向List集合中存放信息,消费者rpop从List集合中获取信息。

 🍠优点:

1)List数据结构有持久化

2)支持多播

🍠缺点:

1)无法及时获取消息,数据冗余。

2)没有确认机制。

pub&sub(发布订阅)

💌由生产者publish消息到所有频道,消费者subscribe监听的频道中的内容。

🍠缺点:

1)没有持久化,如果一个消费者宕机了,再启动后宕机期间产生的消息会丢失。

2)消费者被动接收消息。

3)没有确认机制。

🍠解决:

1)每个频道使用List结构存储信息,解决持久化问题。

2)消费者使用brpop/blpop+超时时间s(0:永久)阻塞接收信息,解决主动获取的延时问题。但是由于没有确认机制,最后一条消息依旧可能丢失。

P.S. block阻塞在连接上,当List结构为空时才会阻塞等待,后面的命令无法执行。

stream

💌基于基数树的数据结构,使用多个消费者组从不同的消息ID读取数据,每个消费者组内多个消费者为竞争关系

// 创建消息队列que1,*为由Redis生成消息ID。
xadd que1 * msg "hello"

1.xadd+xread
// 若没有消费者组,相当于lpush&brpop,从第一个ID开始每次读一条。
xread count 1 block 0 streams que1 0-0

2.xadd+xreadgroup
// 创建消费者组group1。
xgroup create que1 group1 0-0
// 创建消费者consumer1,从当前ID获取信息。
xreadgroup group group1 consumer1 count 1 block 0 streams que1 >
// 查看消费者组group1内一个消费者未处理完成的消息。
xpending que1 group1 - + 1
// 确认消息。
xack que1 group1 未确认消息ID
// 将消息转给另一个消费者consumer2 处理。
xclain que1 group1 consumer2 min-idle-time 未确认消息ID
// 删除消息。
xdel que1 消息ID

🍠优点:

1)可持久化。

2)支持多播。

3)有确认机制

🧡Kafka实现消息队列

💌可见之前的文章~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值