Redis5.0大招来了,重磅功能 Stream 介绍

赶着热浪,Redis5.0大招来了,增加了很多新的特色功能;其中最重磅就是多出了一个数据结构Stream。其实在Redis 4.0 时就有预兆了;只不过是作者觉得其是太牛掰的新功能,必须在大版本中放出来,也是很认真的借鉴了kafka stream 设计。

Redis5.0大招来了,重磅功能 Stream 介绍

Redis Stream介绍:

1.该Stream的本质是一个消息队列,其结构实现是一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的ID和对应的内容。

2.该Stream会永久的存放数据,并且客户端会保留上一次拿的id,甚至通过修改id可以拿回以前的数据,和消息队列服务持久化消息回放一样;

3.该Stream提供了消费者组,不同组接收到的数据完全一样,但是组内的消费者则是竞争关系;一个应用理解为一个消费者组,应用后端的多个实例共同消费一份数据。

4.可以设置为阻塞与非阻塞模式;

5.多客户端时,遵循FIFO特性。

官网:

https://redis.io

帮助理解:

每个Stream都有唯一的名称,首次使用xadd指令追加消息时自动创建。

每个Stream都可以挂多个消费组,每个消费组会通过游标last_delivered_id记录该组在Stream数组上消费的位置;每个消费组(Consumer Group)的状态都是独立的,相互不受影响。

消费者(Consumer)内部会有个积压状态变量pending_ids,记录了当前已经被客户端读取的消息,但是还没有ack,随着客户端ack的返回,积压值会变小。

看到这里相信已经入门,和kafka stream有么有很像,更多stream自行理解即可,也欢迎留言讨论。

几个命令简单介绍:

xadd 追加消息

xdel 删除消息,这里的删除仅仅是设置了标志位,不影响消息总长度

xrange 获取消息列表,会自动过滤已经删除的消息

xlen 消息长度

del 删除Stream

xgroup create 创建消费组

xinfo streamname 获取信息

xread 消息读取,类似使用list方式

小结:其实redis的stream算不上新的东西,接触消息队列服务和kafka stream 的同学很容易理解,并且在某些场景可以使用redis的stream代替kafka等消息队列,减少系统复杂性,不用混合使用,增强系统的稳定性,架构更简洁易维护。

更多内容请关注每日编程,每天进步一点。


分享到:


相關文章: