数据类型 stream
stream 数据类型源自redis5.0,在设计上参考kafka。
-
XADD 向队列中追加消息
命令语法:
XADD key [NOMKSTREAM] [MAXLEN|MINID [=|~] threshold [LIMIT count]] *|ID field value [field value ...]举例:
示例一: redis-server自动生产ID。执行完毕返回了一个ID"1706336686113-0"。这个ID是redis-server 按照时间戳格式(毫秒)自动生产
127.0.0.1:6379> XADD temperature * temperature 18 date today "1706336686113-0"示例二: 有消息生产者手动指定事件ID。 规则: id 的格式 必须为 “数字1-数字2”,最小取值为“0-1”,并且需要保证ID递增
127.0.0.1:6379> XADD mystream 0-1 name zhangsan age 33 "0-1"127.0.0.1:6379> XADD mystream 0-2 name lisi age 31 "0-2"示例三:指定stream 的消息个数。 示例中适中保持最大消息数量为10个。当向stream中插入100条消息时会删除前90条消息,最终只保留最后10条
100 XADD mystream1 maxlen = 10 * name zhangsan127.0.0.1:6379> XLEN mystream1 (integer) 10 -
XLEN 查看stream 中消息数量
命令语法:
xlen key举例:
127.0.0.1:6379> XLEN mystream1 (integer) 10 -
XRANGE 按照给定的id返回stream中元素
命令语法:
XRANGE key start end [COUNT count]举例:
示例一:返回所有消息,“-”表示无穷小的元素id,“+” 表示无穷大的元素id
XRANGE mystream1 - +XRANGE mystream1 0 +XRANGE mystream1 0-0 +示例二:返回指定范围的消息。返回id在“1706337476331-1”到无穷大消息
XRANGE mystream1 1706337476331-1 +XRANGE mystream1 (1706337476331-1 +示例二:返回指定范围的消息。返回id在“1706337476331-1” 和 “1706337476331-3” 范围内的消息
XRANGE mystream1 1706337476331-1 1706337476331-3XRANGE mystream1 (1706337476331-1 1706337476331-3XRANGE mystream1 (1706337476331-1 (1706337476331-3 -
XREVRANGE 按照给定的id返回stream中元素。返回顺序是倒序
命令语法:
XREVRANGE key start end [COUNT count]举例:
示例一:返回所有消息,“-”表示无线小的元素id,“+” 表示无线大的元素id
XREVRANGE mystream1 + -XREVRANGE mystream1 + 0XREVRANGE mystream1 + 0-0示例二:返回指定范围的消息。返回id在“1706337476331-1”到无穷大消息
XREVRANGE mystream1 + 1706337476331-1XREVRANGE mystream1 + (1706337476331-1示例二:返回指定范围的消息。返回id在“1706337476331-1” 和 “1706337476331-3” 范围内的消息
XREVRANGE mystream1 1706337476331-3 1706337476331-1XREVRANGE mystream1 1706337476331-3 (1706337476331-1XREVRANGE mystream1 (1706337476331-3 (1706337476331-1 -
XREAD 支持从多个steam 中读取元素
命令语法:
XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]举例:
示例一:读取id 大于0的元素
XREAD STREAMS mystream 0XREAD STREAMS mystream 0-0示例二:同时读取多个元素,读取id 大于0的元素
XREAD STREAMS mystream mystream1 0-0 0-0示例三:指定返回元素的个数。
XREAD COUNT 1 STREAMS mystream 0示例四:阻塞等待从xread 命令执行以来追加进来的消息。此时客户端处于阻塞状态,可以通过其他终端先stream 中添加数据观察变化>
XREAD COUNT 1 block 0 STREAMS mystream $
消费者组。消费者组实现了同一消费组中只有一个消费者可以消费该消息,不同消费组之间的消费者可以重复消费同一个消息
-
XGROUP 实现创建、销毁、管理消费组的功能
命令语法:
XGROUP [CREATE key groupname ID|$ [MKSTREAM]] [SETID key groupname ID|$] [DESTROY key groupname] [CREATECONSUMER key groupname consumername] [DELCONSUMER key groupname consumername]举例:
示例一:创建消费组。“$”表示该消费组中的消费者可以消费自改组创建后所有追加进来的消息
127.0.0.1:6379> XGROUP CREATE mystream mygroup $ OK示例二:修改消费者组消费id。示例中将上一个命令 “$” 修改为从0开始消费,以下命令执行后消费组中的消费者就可以正常消费stream 中的所有消息
127.0.0.1:6379> XGROUP SETID mystream mygroup 0-0 OK示例三: 在改组中创建消费者
XGROUP CREATECONSUMER mystream mygroup mygroup-c1XGROUP CREATECONSUMER mystream mygroup mygroup-c2示例四: 删除消费者
127.0.0.1:6379> XGROUP DELCONSUMER mystream mygroup mygroup-c2 (integer) 0示例五: 销毁消费者组。连带销毁属于改组的消费者
127.0.0.1:6379> XGROUP DESTROY mystream mygroup (integer) 1
-
-
XREADGROUP 通过消费组消费数据
命令语法:
XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] ID [ID ...]举例:
示例一:从mygroup组中创建 消费者mygroup-c2 来消费mystream 。“>” 表示消费大于创建组时指定的id 同一消息在同一个消费组内仅能消费一次
XREADGROUP GROUP mygroup mygroup-c2 STREAMS mystream >示例二:消费指定数量的消息。默认消费全部符合条件的消息
XREADGROUP GROUP mygroup mygroup-c2 COUNT 2 STREAMS mystream >示例三:阻塞等待消费消息。直到消费到符合条件的消息或阻塞超时才解除阻塞
XREADGROUP GROUP mygroup mygroup-c2 block 100 STREAMS mystream >XREADGROUP GROUP mygroup mygroup-c2 block 0 STREAMS mystream >示例四:noack .消息消费后一般情况下会进入pending entries list 中,等待消费者消费完毕进行确认。如果添加了noack 则可以省略ack 动作,但是也可能带来数据未正常消费导致消息丢失的问题
READGROUP GROUP mygroup mygroup-c2 block 0 NOACK STREAMS mystream >127.0.0.1:6379> XINFO CONSUMERS mystream mygroup 1) 1) "name" 2) "mygroup-c2" 3) "pending" 4) (integer) 0 5) "idle" 6) (integer) 6392 -
XPENDING 查阅 pending entries list 中的信息。处于该表的消息表示已经获取消息,但还未确认消费完毕。
命令语法:
XPENDING key group [[IDLE min-idle-time] start end count [consumer]]举例:
示例一:查阅 pending entries list 中的信息
127.0.0.1:6379> XPENDING mystream mygroup 1) (integer) 102 # 当前组有102条处于pending entries list中 2) "0-1" # 最小的消息id 3) "1706341847769-2" # 最大的消息id 4) 1) 1) "mygroup-c2" # consumer 名字 2) "102" # 当前consumer 有102条处于pending entries list中示例二:查阅 pending entries list 中指定id范围的信息
127.0.0.1:6379> XPENDING mystream mygroup - + 2 1) 1) "0-1" # 消息id 2) "mygroup-c2" # consumer 名称 3) (integer) 418964 # 当前消息处于 pending entries list 中空闲时长。 该字段成为time-since-delivery 4) (integer) 1 2) 1) "0-2" 2) "mygroup-c2" 3) (integer) 418964 4) (integer) 1示例三:查阅 pending entries list 中指定空闲时长大于 662342 秒的消息
XPENDING mystream mygroup IDLE 662342 - + 2示例四:查阅 pending entries list 中指定消费者的消息
XPENDING mystream mygroup IDLE 662342 - + 2 mygroup-c2 -
XACK 标记消息消费完成,并从pending entries list 中移除该消息
命令语法:
XACK key group ID [ID ...]举例:
示例一:确认消息消费完成
XACK mystream mygroup 0-1 -
XCLAIM 在pending entries list 中转移一个消息所有者
命令语法:
XCLAIM key group consumer min-idle-time ID [ID ...] [IDLE ms] [TIME ms-unix-time] [RETRYCOUNT count] [force] [justid]举例:
示例一:查阅 pending entries list 中的信息
第一步查阅处于pending entries list 中的消息
127.0.0.1:6379> XPENDING mystream mygroup - + 1 1) 1) "1706341847707-0" 2) "mygroup-c2" 3) (integer) 1734579 4) (integer) 1 127.0.0.1:6379>第二步 改变该消息的所有者
127.0.0.1:6379> XCLAIM mystream mygroup mygroup-c1 1734579 1706341847707-0 1) 1) "1706341847707-0" 2) 1) "name" 2) "abc"第三步再次确认消息所有者
127.0.0.1:6379> XPENDING mystream mygroup 1) (integer) 100 2) "1706341847707-0" 3) "1706341847769-2" 4) 1) 1) "mygroup-c1" 2) "1" 2) 1) "mygroup-c2" 2) "99"示例二:设置消息自分配到当前消费者,已经空闲的时长。默认重置为0
XCLAIM mystream mygroup mygroup-c2 1 1706341847707-0 IDLE 100示例二:justid 只返回消息id,而不是完整的消息信息
127.0.0.1:6379> XCLAIM mystream mygroup mygroup-c2 1 1706341847707-0 justid 1) "1706341847707-0" -
XAUTOCLAIM key group consumer min-idle-time start [COUNT count] [justid] summary: Changes (or acquires) ownership of messages in a consumer group, as if the messages were delivered to the specified consumer. since: 6.2.0 -
XDEL key ID [ID ...] summary: Removes the specified entries from the stream. Returns the number of items actually deleted, that may be different from the number of IDs passed in case certain IDs do not exist. since: 5.0.0 -
XINFO [CONSUMERS key groupname] [GROUPS key] [STREAM key] [HELP] summary: Get information on streams and consumer groups since: 5.0.0 -
XTRIM key MAXLEN|MINID [=|~] threshold [LIMIT count] summary: Trims the stream to (approximately if '~' is passed) a certain size since: 5.0.0
浙公网安备 33010602011771号