Redis——关于redis5.0的stream消息队列的命令的使用

stream是redis5.0新增的一个数据类型,完善了消息队列功能,可以通过rdb或aof持久化到硬盘上;

简单模式相关命令:

XADD key ID field string [field string ...]
XLEN key
XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]
XRANGE key start end [COUNT count]
XREVRANGE key end start [COUNT count]
XDEL key ID [ID ...]
XTRIM key MAXLEN [~] count

组模式相关命令:

XGROUP [CREATE key groupname id-or-$] [SETID key id-or-$] [DESTROY key groupname] [DELCONSUMER key groupname consumername]
XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]
XPENDING key group [start end count] [consumer]
XACK key group ID [ID ...]
XCLAIM key group consumer min-idle-time ID [ID ...] [IDLE ms] [TIME ms-unix-time] [RETRYCOUNT count] [force] [justid]

信息查询命令:

XINFO [CONSUMERS key groupname] [GROUPS key] [STREAM key] [HELP]

命令解释:

  1. XADD key ID field string [field string ...]
    添加stream消息,key不存在则新建stream;
    ID可以为*,表示redis自动生成id,id由一个long数字+横线+一个long数字组成,自动生成的id第一个long是当前时间毫秒值,第二个long是在当前毫秒值上从0递增的数字;
    ID也可以自定义,最小id是0-1(不能是0-0,但存在1-0,、2-0……),后续id的第一个数字不能小于已经存在的id的第一个数字,当第一个long相同时第二个long数字要大于已经存在的最大的第二个long的值;
    自动生成id可以处理服务器时间改动问题,如果发现当前时间的long值比stream最大的long小,则保持最大的long不变,递增第二个long;
    可以在key和ID之间加入 MAXLEN [~] n 参数在添加新数据的时候同时限制stream长度,会丢弃超过长度的旧数据,~表示非绝对长度限制;

     
  2. XLEN key
    返回stream的长度;

     
  3. XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]
    读取stream消息;
    [COUNT count]设置读取数量;
    [BLOCK milliseconds]设置阻塞等待时间(ms),获取不到返回nil;
    [key ...]可以读取多个stream;
    [ID ...]表示读取该id之后的数据,可以为0表示从stream第一个数据读取,可以为$表示阻塞等待读取最新消息(需跟BLOCK同时使用);
    读取多stream的时候COUNT会对每个stream读取count个数据;



     
  4. XRANGE key start end [COUNT count]
    获取一段区间的消息;
    start起始id,-表示无穷小;
    end结束id,+表示无穷大;
    start和end的id都包括在内;

     
  5. XREVRANGE key end start [COUNT count]
    反向获取一段区间的消息;

     
  6. XDEL key ID [ID ...]
    删除stream的消息;

     
  7. XTRIM key MAXLEN [~] count
    设置队列长度;
    丢弃超过长度的旧的消息;
    ~表示非绝对长度(旧数据可能会被丢弃也可能不丢弃,性能高);


     
  8. XGROUP [CREATE key groupname id-or-$] [SETID key id-or-$] [DESTROY key groupname] [DELCONSUMER key groupname consumername]
    消息组操作;
    [CREATE key groupname id-or-$]创建消息消费组,id表示设置组的初始id(记录最后消费id,从该id之后开始读取消息),id为0表示组从stream的第一条数据开始读,id为$表示组从新的消息开始读取;
    [SETID key id-or-$]设置消息组最后消费的id,用于读取该id之后的消息;
    [DESTROY key groupname]销毁消息组;
    [DELCONSUMER key groupname consumername]清理消息组的消费者(组消费者从xreadgroup直接指定);返回删除该消费者前PEL里消息数量;

     
  9. XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]
    消费组消息(消费的消息会记录在pending列表里,等待xack确认,需要先创建消费组);
    [COUNT count]设置获取消费消息数量;
    [BLOCK milliseconds]设置阻塞等待时间(ms)(通常跟>一起使用获取新消息);
    [ID ...]读取id之后的消息,id为0可获取已读但未确认的消息(可多次消费,不会获得未读取的消息),id为>表示读取组内未读取的消息(同组内成员会消费不同消息);
    可在consumer和STREAMS之间加入noAck选项,使消费的消息不加入pending列表;



     
  10. XPENDING key group [start end count] [consumer]
    查询已消费但未确认的组消息;
    [start end count]设置查询起始id,结束id,数量;
    [consumer]可以指定消费者;
    返回值4行:消息id;消费者;最后消费时间距离现在经过的ms时间;消费次数;


     
  11. XACK key group ID [ID ...]
    确认pending列表里的消息;

     
  12. XCLAIM key group consumer min-idle-time ID [ID ...] [IDLE ms] [TIME ms-unix-time] [RETRYCOUNT count] [force] [justid]
    将pending里的消息转移给其他消费者;
    consumer 新消费者;
    min-idle-time 最小空闲时间,空闲超过该时间的消息才转移;
    [ID ...]消息id;
    [IDLE ms]设置转移后的空闲时间;
    [TIME ms-unix-time]通过unix时间设置;
    [RETRYCOUNT count]设置转移后消息的消费次数;
    [force]强制转换(id需为stream里存在的id)(可强制添加给其他组的消费者,但本组pending列表不删去);
    [justid]命令只返回id,消费次数不变,否则返回完整消息,消费次数+1(若设置RETRYCOUNT则以设置为准);



  13. XINFO [CONSUMERS key groupname] [GROUPS key] [STREAM key] [HELP]
    查询相关的消息;

    查询组消费者信息:
    name:消费者名字;
    pending:未确认消息列表长度;
    idle:距离最后一次读取消息经过的时间ms;

    读取组信息:
    name:消费组的名字;
    consumers:组内消费者的数量;
    pending:未确认消息的数量;
    last-delivered-id:最后消费消息的id;

    读取stream信息:
    length:stream的长度;
    groups:消费组数量;
    last-generated-id:保存了最后自动生成的id;
    first-entry:第一个消息;
    last-entry:最后一个消息;
    (radix-tree-keys和radix-tree-nodes可能跟存储结构相关)

redis 7.0.2版本命令:

基本:

  • XADD key [NOMKSTREAM] [MAXLEN|MINID [=|~] threshold [LIMIT count]] *|id field value [field value ...]
    -NOMKSTREAM:(v6.2.0开始)stream不存在时禁用创建新steam;
    -MINID:(v6.2.0开始)添加的同时删除ID低于指定ID的条目;(同XTRIM功能)
    -LIMIT:(v6.2.0开始)(同XTRIM功能)
    -<ms>-*:(v7.0.0开始)ID可以只提供前半段ms,后半段设置-*由服务器自动生成(如:12345678-*);
  • XLEN key
  • XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] id [id ...]
  • XRANGE key start end [COUNT count]
  • XREVRANGE key end start [COUNT count]
  • XDEL key id [id ...]
  • XTRIM key MAXLEN|MINID [=|~] threshold [LIMIT count]
    -MINID:(v6.2.0开始)删除ID低于指定ID的条目;
    -=:精确限制steam长度;(也是默认)
    -LIMIT:(v6.2.0开始)指定被移除的最大条目数,默认值100*节点条目数,设置0则禁用限制机制;
  • XSETID key last-id [ENTRIESADDED entries_added] [MAXDELETEDID max_deleted_entry_id]
    -内部命令,用于master复制最后一次steam分配的ID;成功返回OK;

组相关:

  • XGROUP CREATE key groupname id|$ [MKSTREAM] [ENTRIESREAD entries_read]
    -MKSTREAM:自动创建不存在的长度为0的stream;(默认不存在steam将报错)
    -ENTRIESREAD:(v7.0.0开始)指定group的entries_read参数,启用对任意ID(不是steam第一个或者最后一个或者0-0的ID)的消费组延迟(lag)追踪,意思是设置group的entries_read来间接设置group的lag,有可能你不知道具体ID(读取该ID后的数据)但可能明确知道需要从steam的倒数第几条开始group读取(将entries_read设置为entries-added减去倒数条数即可);(group的entries_read计数表示steam的group里已经被消费者读取条目数,steam的entries-added计数表示添加到steam里的条目数,group的lag表示消费者还未取走的条目数)
  • XGROUP CREATECONSUMER key groupname consumername
    -创建一个指定名字的消费者,其他带有消费者名字的命令也会自动创建消费者(如XREADGROUP);返回创建消费者数量(0或1);
  • XGROUP DELCONSUMER key groupname consumername
  • XGROUP DESTROY key groupname
  • XGROUP HELP
    -返回XGROUP子命令的说明;
  • XGROUP SETID key groupname id|$ [ENTRIESREAD entries_read]
    -ENTRIESREAD:(v7.0.0开始)同XGROUP CREATE里的;
  • XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] id [id ...]
  • XPENDING key group [[IDLE min-idle-time] start end count [consumer]]
    -IDLE min-idle-time:(v6.2.0开始)过滤空闲时间超过规定ms值的条目;
  • XACK key group id [id ...]
  • XCLAIM key group consumer min-idle-time id [id ...] [IDLE ms] [TIME unix-time-milliseconds] [RETRYCOUNT count] [FORCE] [JUSTID]
  • XAUTOCLAIM key group consumer min-idle-time start [COUNT count] [JUSTID]
    -用于将超过规定空余时间的pending列表条目转移给新消费者;
    -返回值有3行:1、一个ID用于下次XAUTOCLAIM的<start>参数;2、成功转移的消息列表(格式同XRANGE);3、ID列表,表示该消息不在steam中了,并从找到他们的PEL中删除;

查询信息:

  • XINFO CONSUMERS key groupname
  • XINFO GROUPS key
    -返回新增字段entries-read:(v7.0.0开始)给消费者消费的最后一个消息的逻辑计数器;
    -返回新增字段lag:(v7.0.0开始)steam中未被消费的消息的条目数,当无法确定时为NULL;
  • XINFO HELP 
  • XINFO STREAM key [FULL [COUNT count]]
    -FULL:默认只显示group数量和第一条最后一条数据,使用FULL显示steam具体条目数据和全部组的详细信息,包括组内总PEL(Pending Entries List)和每个消费者PEL,可以附加COUNT限制最多显示几条数据(steam条目、组总PEL、每个消费者PEL,分别独立计数),默认最多显示10条,设置0显示全部条数;
    -返回新增字段max-deleted-entry-id、entries-added、recorded-first-entry-id、entries-read、lag:(v7.0.0开始)从流中删除的最大条目的ID、流的生命周期内添加到流的所有条目计数、记录的第一个条目的ID、steam的group里被消费的条目计数、steam里group里未被消费的条目计数(被延迟消费的条目);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值