Redis Stream类型的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis Stream类型的使用相关的知识,希望对你有一定的参考价值。

参考技术A

最近在看 redis 这方面的知识,发现在 redis5 中产生了一种新的数据类型 Stream ,它和 kafka 的设计有些类似,可以当作一个简单的消息队列来使用。

解释:

xadd 命令 返回的是数据的id, xx-yy (xx指的是毫秒数,yy指的是在这个毫秒内的第几条消息)

指定指定Stream的大小比模糊指定Stream的大小会稍微多少消耗一些性能。

~ 模糊指定流的大小,可以看到指定的是1,实际上已经到了3.

使用redis的事务操作,获取到同一毫秒产生的多条数据,时间戳一样,序列号不一样

-: 表示最小id的值

+: 表示最大id的值

(: 表示开区间

直接写 毫秒 不写后面的序列号即可。

start 和 end 的值写的一样即可获取单挑数据。

使用 count 进行限制

使用方式和 XRANGE 类似,略。

需求: 往Stream中加入3条消息,然后删除第2条消息

注意:

需要注意的是,我们从Stream中删除一个消息,这个消息并不是被真正的删除了,而是被 标记为删除 ,这个时候这个消息还是占据着内容空间的。如果所有Stream中所有的消息都被标记删除,这个时候才会回收内存空间。但是这个Stream并不会被删除。

查看Stream中元素的长度

注意:

如果 xlen 后方的 key 不存在则返回0,否则返回元素的个数。

上方的意思是,保留 stream-key 这个Stream中最后的2个消息。

minid 是删除比这个id小的数据,本地测试的时候 没有测试出来 ,略。

XREAD 只是读取消息,读取完之后并不会删除消息。 使用 XREAD 读取消息,是完全独立与消费者组的,多个客户端可以同时读取消息。

count 限制单次读取最后的消息,因为当前读取可能没有这么多。

即读取队列尾的下一个消息,在非阻塞模式下始终是 nil

注意:

1、创建Stream的名称是 stream-key

2、创建2个消息,aa和bb

$ 表示从最后一个元素消费,不包括Stream中的最后一个元素,即消费最新的消息。

1636362619125-0 某个消息的具体的ID,这个 g3 消费者组中的消息都是 大于> 这个id的消息。

也可以通过 xautoclaim 来实现。

以上是关于Redis Stream类型的使用的主要内容,如果未能解决你的问题,请参考以下文章

Redis5数据类型6-Stream

Redis基础 -- 流(stream)类型 和 流(stream)类型的常用命令

Redis中的Stream数据类型作为消息队列的尝试

控制 Redis stream 的消息数量

别再用 Redis List 实现消息队列了,Stream 专为队列而生

基于Stream的Redis消息队列