redis --- Stream类型的使用

目录

一、Stream类型的使用

1.1、四个特殊符号 

1.2、队列相关指令 

1.2.1、xadd 

1.2.2、xrange

1.2.3、xrevrange 

1.2.4、xdel 

1.2.5、xlen 

1.2.6、xtrim 

 1.2.7、xread

 1.3、消费组相关指令

 1.3.1、xgroup create

 1.3.2、xreadgroup group

 1.3.2、xpending

 1.3.3、xack

 1.3.4、xinfo


一、Stream类型的使用

1.1、四个特殊符号 

1、- + :最小和最大可能出现的id

2、$:表示只消费新的消息,当前流中最大的id,可用于将要到来的信息。

3、>:用于xreadgroup命令,表示迄今还没有发送给组中使用者的信息,会更新消费者组的最后id

4、*:用于xadd命令中,让系统自动生产id

1.2、队列相关指令 

1.2.1、xadd 

添加消息到队列末尾:①、消息id必须要比上个id大。②、默认用星号表示自动生成规则。 

127.0.0.1:6379> xadd mystream * id 100 name ya1
1680532830663-0
127.0.0.1:6379> xadd mystream * id 110 name ya2
1680532843597-0 

XADD用于向stream队列中添加消息,如果指定的stream队列不存在,则该命令执行时会新建一个stream队列。

 信息条目指序列号,在相同的毫秒下序列号从0开始递增,序列号是64位长度,理论上在同一毫秒内生成的数据量无法达到这个级别,因此不用担心序列号不够用。milisecondsTime指redis节点服务器的本地时间,如果存在当前的毫秒时间戳比以前已经存在的数据的时间戳小的话(本地时间钟后跳),那么系统将会采用以前相同的毫秒创建新的id,即redis在增加消息条目时会检查当前id与上一条目的id,自动纠错的情况,一定要保证后面的id比前面大,一个流中信息条目的id必须是单调增的,这是流的基础。

客户端显示传入规则:redis对于id有强制要求,格式必须是时间戳-自增id这样的方式,且后续id不能小于前一个id。

stream的消息内容,Message Content它的结构类似Hash结构,以key-value的形式存在。

1.2.2、xrange

用于获取消息列表(可以指定范围),忽视删除的信息 :①、start表示开始值,-代表最小值。②、end:结束值,+代表最大值。③、count:最多获取多少值。

127.0.0.1:6379> xrange mystream - +
1680532830663-0
id
100
name
ya1
1680532843597-0
id
110
name
ya2
127.0.0.1:6379> xrange mystream - + count 1
1680532830663-0
id
100
name
ya1
 

1.2.3、xrevrange 

127.0.0.1:6379> xrevrange mystream + -
1680532843597-0
id
110
name
ya2
1680532830663-0
id
100
name
ya1
 

1.2.4、xdel 

127.0.0.1:6379> xdel mystream 1680532830663-0
1
127.0.0.1:6379> xrevrange mystream + -
1680532843597-0
id
110
name
ya2
 

1.2.5、xlen 

用于获取stream队列的消息的长度。

127.0.0.1:6379> xlen mystream
1
 

1.2.6、xtrim 

用于对stream的长度进行截取,如超长会进行截取。

①、maxlen:允许的最大长度,对流进行修剪限制长度

②、minid:允许的最小id,从某个id值开始比该id值小的将会被抛弃。

 1.2.7、xread

用于获取消息(阻塞/非阻塞),只会返回大于指定id的消息。

 非阻塞:

127.0.0.1:6379> xread count 1 streams mystream $

127.0.0.1:6379> xread count 1 streams mystream 0-0
mystream
1680536136650-0
id
130
name
ya4
 

阻塞:

 stream的基础方法,使用xadd存入消息和xread循环阻塞读取消息的方式可以实现简易版的消息队列

 1.3、消费组相关指令

 1.3.1、xgroup create

用于创建消费者组

$:表示从stream尾部开始消费  

0:表示从stream头部开始消费 

 1.3.2、xreadgroup group

">"表示从第一条尚未被消费的消息开始读取

 消费组的目的:让组内的多个消费者共同分担读取信息,所以,通常会让每个消费者读取部分消息,从而实现消息读取负载在多个消费者间是均衡分布的。

 基于stream实现的消息队列,如何保证消费者在发生故障或宕机再次重启后,仍然可以读取未处理完的消息?

1、stream会自动使用内部消息队列(PENDING List)留存消费组里每个消费者读取的消息保底措施,直到消费者使用XACK命令通知stream“消息已经处理完成”。

2、消费确认增加了消息可靠性,一般在业务处理完成后,需要执行XACK命令确认消息已经被消费完成了。

 1.3.2、xpending

①、查询每个消费组内所有消费者(已读取、但尚未确认)的消息。 

 ②、查看某个消费者具体读取了那些数据。

 1.3.3、xack

向消息队列确认消息处理已完成

 1.3.4、xinfo

打印stream\consumer\group的详细信息

127.0.0.1:6379> xinfo stream mystream
 1) "length"
 2) (integer) 4
 3) "radix-tree-keys"
 4) (integer) 1
 5) "radix-tree-nodes"
 6) (integer) 2
 7) "last-generated-id"
 8) "1680537770770-0"
 9) "max-deleted-entry-id"
10) "1680532830663-0"
11) "entries-added"
12) (integer) 7
13) "recorded-first-entry-id"
14) "1680536136650-0"
15) "groups"
16) (integer) 5
17) "first-entry"
18) 1) "1680536136650-0"
    2) 1) "id"
       2) "130"
       3) "name"
       4) "ya4"
19) "last-entry"
20) 1) "1680537770770-0"
    2) 1) "id"
       2) "160"
       3) "name"
       4) "ya7"
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸭鸭老板

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值