一篇文章搞定Redis Stream

今天给大家带来一篇关于Redis Stream的文章,文章会从消息队列的基本概念、然后基于Redis Stream基本操作,顺带着会讲Redis Stream的存储结构,最后配合在Spring Boot框架来讲解实战。阅读完这篇文章以后,基本上就能把Redis Stream拿捏住。

话不多说,开始~

也还是老规矩,先上导读图。

搞定Redis Stream

概念

Redis Stream 是Redis5.0推出的一种专门用来处理消息队列场景的高级数据结构,是Redis下消息队列的最佳实现。

stream全局图-不是我画的

这是一个很好的Redis Stream知识体系图,现在看着看不懂这个图也没有关系,我会由浅入深的给大家剖析该体系图。

什么是消息队列

队列是一种数据结构,对应到我们生活中的例子,就是排队。讲究着先来先处理的原则,目的是为了避免混乱与系统瘫痪。

消息队列把我们具体的业务,都抽象成为“消息”。排队做核酸,也可以叫做“核酸”队列。

刚说了队列是为了避免混乱与系统瘫痪,它还有一些其他的作用:

  1. 消峰填谷

这点表现最明显的就是我们常说的秒杀系统,访问量在某一个刻,到达巅峰,然后又断崖式下跌。

根据具体的业务场景,把业务处理的压力压入到消息队列中,以时间轴为水平线,来处理业务。

 

消峰填谷

  1. 异步解耦

假如有一个电商系统,在商品下单后,需要通知客服小二核对地址,需要通知物流仓储系统发货,需要营销中心发放优惠券 等等一些业务。

异步解耦

消息队列还有一些其他的作用,以上两个是比较典型的。

在Reids没有推出Stream数据类型的时候,我们也可以用Redis来做消息队列。分别是利用Reids的list和订阅/发布两种数据类型。

  1. list

用push命令压入队列,用pop命令来拿出队列里边的消息。

## 在 lianbianKey 里边压入2个消息,messageContent1、messageContent2
lpush lianbianKey messageContent1
lpush lianbianKey messageContent2

## 在另外一端,lpop命令取出元素
## lpop移除并获取第一个元素
lpop lianbainKey
  1. 订阅/发布

这个模式,和我们平常看电视频道类似,把电视台切换到湖南卫视,你就能自然看到当前电视台播放的节目(快乐大本营、天天向上 ...),就相当于你订阅了湖南卫视频道,在湖南卫视电视台发布节目的时候,你就能够很自然的接收到。但是这种模式有一个弊端,就是错过了就是错过了,错过了19:00的新闻联播,就是错过了。

都能实现消息队列,为什么Redis在5.0的版本里,还推出Stream数据类型呢?与list和订阅/发布又有什么异同呢?

为什么要Redis Stream

  1. 标准化操作

在没有Redis Stream推出的时候,我们知道利用Reids能够实现队列功能,但是大家实现得五花八门,没有一个统一的、标准的实现方式。最后导致的就是Redis队列生态显得乱,在推出Stream之后,后续实现队列都会使用该新的数据类型,利于标准化。

  1. 取长补短

不管是list还是订阅/发布模式,都有其弊端,比如list不能友好的重复消费,需要重复消费的话,需要程序代码去控制;而订阅/发布模式是一种转发消息的模式,只有订阅者在线的时候才能接收到消息,订阅者不在线期间产生的消息,就丢掉了。而Stream,有借鉴Kafka一些市面上成熟的消息队列的思想,可以消费失败重复消费,消息是持久化的。

  1. 降低门槛

不管是之前的list还是订阅/发布模式,其实就不能说是严谨的消息队

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值