Streams:深入理解Redis5.0新特性

相较于Redis4.0,Redis5.0增加了很多新的特性,而streams是其中最重要的特性之一。streams是redis 的一种基本数据结构,它是一个新的强大的支持多播的可持久化的消息队列,在设计上借鉴了kafaka。streams的数据类型本身非常简单,有点类似于hash结构,但是它的额外特性异常强大且复杂:

支持持久化。streams能持久化存储数据,不同于 pub/sub 机制和 list  消息被消费后就会被删除,streams消费过的数据会被持久化的保存在历史中。

支持多播。 这一点跟  pub/sub 有些类似。

支持消费者组。streams 允许同一消费组内的消费者竞争消息,并提供了一系列机制允许消费者查看自己的历史消费消息。并允许监控streams的消费者组信息,消费者组内消费者信息,也可以监控streams内消息的状态。

基础内容 数据 ID

streams 提供了默认的id模式用来唯一标识streams中的每一条数据,由两部分组成:
 <millisecondsTime>-<sequenceNumber> 
millisecondsTime是redis服务所在机器的时间,sequenceNumber用于同一毫秒创建的数据。需要注意的一点是streams的id总是单调增长的,即使redis服务所在的服务器时间异常。如果当前的毫秒数小于以前的毫秒数,就会使用历史记录中最大的毫秒数,然后序列号递增。而这样做的原因是因为streams的机制允许根据时间区间或者某一个时间节点或者某一id查找数据。

向streams插入数据

streams 的基础写命令为 XADD ,其语法为 XADD key ID field value [field value ...] 

127.0.0.1:6379> XADD mystream * name dwj age 18 "1574925508730-0" 127.0.0.1:6379>

上面的例子使用 XADD 向名为 mystream 的streams中添加了一条数据,ID使用*表示使用streams使用默认的ID,在本例中redis返回的 1574925508730-0 就是redis为我们插入的数据生成的ID。

另外streams 查看streams长度的命令为 XLEN 

127.0.0.1:6379> XLEN mystream (integer) 3 127.0.0.1:6379> 从streams中读取数据

从streams中读取数据会比写数据复杂很多,用日志文件进行对比,我们可以查看历史日志,可以根据范围查询日志,我们可以通过unix的命令 tail -f 来监听日志,可以多个用户查看到同一份日志,也可以多个用户只能查看到自己有权限查看的那一部分日志。

按范围查询: XRANGE 和 XREVRANGE

首先来介绍一下 根据范围查询,这两种操作都比较简单,以 XRANGE 为例,它的语法格式为 XRANGE key start end [COUNT count] , 我们只需要提供两个id, start 和 end ,返回的将是一个包含 start 和 end 的闭区间。两个特殊的ID - 和 + 分别表示可能的最小ID和最大ID。

127.0.0.1:6379> XRANGE mystream - + 1) 1) "1574835253335-0" 2) 1) "name" 2) "bob" 3) "age" 4) "23" 2) 1) "1574925508730-0" 2) 1) "name" 2) "dwj" 3) "age" 4) "18" 127.0.0.1:6379>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpggxy.html