redis中的stream流

这个是redis5.0版本才增加的一个数据结构,其借鉴了kafka的设计,redis stream是一个消息链表,将所有的消息都串起来,每一个消息都有一个唯一的id和对应的内容,并且消息是持久化的,redis重启后,内容还存在

每个stream都有一个唯一的名称,它就是redis的key,在我们使用xadd指定追加消息时自动创建

每个stream可以挂在多个消费组,每个消费组都会有一个游标last_delivered_id在stream数组之上往前移动,表示当前消费组已经消费到哪一条消息了,注意消费组是需要手动创建的,并且每次创建需要制定消费开始的位置,然后开始的位置被用来初始化游标,每个消费组之间的状态是独立,相互不受影响,并且同一个消费组可以挂在多个消费者,这些消费者之间是竞争关系,任意一个消费者消费了游标都会进行移动,每个消费者在该组内有一个唯一的名称,其内部有个变量PEL来确保消息至少被消费了一次,从而避免被丢失的情况



其还可以支持独立消费,就像list数据结构一样,指定为 xread命令,其也可以支持等待时间并结束操作



总结:stream的消费模型借鉴了kafka的消费分组概念,它弥补了redis的pub/sub的缺陷,但是其又不同于kafka,kafka支持分区模式,stream不行,如果非要分区的话,得在客户端操作,提供不同的stream名称,对消息进行hash取模选择往哪个stream中塞


更多redis知识:https://blog.youkuaiyun.com/xiao_xia_ming/article/details/106040376

 

redis的stream流结构图预览

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值