Redis命令详解:Streams
Redis5.0迎来了一种新的数据结构Streams,没有了解过的同学可以先阅读前文,今天来介绍一下Streams相关的命令。
XACK
最早可用版本:5.0.0
时间复杂度:O(1)
用法:XACK key group ID [ID…]
这个命令用于删除消费者组的pending entries list中的元素。通常情况下,调用XREADGROUP命令或者消费者调用XCLAIM命令时,会使一个消息阻塞,并存到PEL中,阻塞的消息被发送给消费者时,服务器并不知道消息是否被处理。
当消费者成功消费消息后,会调用XACK命令,服务器就会将消息从PEL中删除,并释放内存。
XADD
最早可用版本:5.0.0
时间复杂度:O(1)
向指定的stream添加元素。如果key不存在,就创建一个新的stream。
entry由一系列field-value对组成,存储顺序由用户添加顺序决定。XADD命令是唯一一个向stream中添加数据的命令。删除数据的命令则有XDEL和XTRIM。
在stream中,entry ID是唯一标识。XADD命令中ID参数是*时,会自动生成唯一ID。然而在生产环境中并不常用,通常需要我们指定一种格式较好的唯一ID。
默认的ID生成策略是:“Unix毫秒时间戳-同一毫秒值内的序列号”。
当用户显式指定ID时,最小值是0-1,且ID必须是递增的。
用户可以使用MAXLEN指定stream的最大元素数量
1XADD mystream MAXLEN ~ 1000 * ... entry fields here ..
上面的波浪线表示不是严格的限制1000个,也可以多出几十个。
XCLAIM
最早可用版本:5.0.0
时间复杂度:O(log N)
用法:XCLAIM key group consumer min-idle-time ID [ID …][IDLE ms] [TIME ms-unix-time] [RETRYCOUNT count][FORCE] [JUSTID]
这个命令用于改变pending消息的所有权,新的owner是命令参数中的consumer。
命令的使用场景是:
一个消费者关联了一个stream
消费者A通过XREADGROUP读取一条消息
这个消息被加入到PEL中,并发送给指定的消费者,但是没有调用XACK命令来确认
这时消费者突然挂掉
其他的消费者就会使用XPENDING命令检查待处理消息列表,为了继续处理这些命令,它们使用XCLAIM命令改变这些消息的所有者。
接下来解释一下命令的各个选项:
IDLE
:设置消息空闲时间,默认是0。消息只有在空闲时间大于IDLE时才会被认领。
TIME
:和IDLE相同,不过它是绝对时间
RETRYCOUNT
:设置重试次数,通常XCLAIM不会改变这个值,它通常用于XPENDING命令,用来发现一些长时间未被处理的消息。
FORCE:在PEL中创建待处理消息,即使指定的ID尚未分配给客户端的PEL。
JUSTID:只返回认领的消息ID数组,不返回实际消息。
XDEL
最早可用版本:5.0.0
时间复杂度:O(1)
删除stream中的entry并返回删除的数量。
XGROUP
最早可用版本:5.0.0
时间复杂度:每个子命令是O(1)
该命令用于管理stream相关的消费者组。使用XGROUP命令你可以:
创建与一个stream相关联的消费者组
销毁一个消费者组
从消费者组中删除指定的消费者
设置消费者组的last delivered ID
创建新的消费者组的命令是:
1XGROUP CREATE mystream consumer-group-name $
最后一个参数是stream中已传递的最后一个ID,使用$表示这个消费者组只能获取到新的元素。
销毁消费者组的命令是:
1XGROUP DESTROY mystream some-consumer-group
即使消费者组存在活跃的消费者和等待消息,它仍然会被删除,所以执行这个命令需要格外谨慎。
删除指定消费者的命令是:
1XGROUP DELCONSUMER mystream consumer-group-name myconsumer123
当一个新的consumer的名字被提到时,就会自动创建消费者。当消费者不再使用时,我们可以将它删除,上面的命令返回消费者在被删除之前所拥有的待处理消息。
设置last delivered ID的命令是:
1XGROUP SETID mystream my-consumer-group 0
最后,如果不记得语法,可以使用命令:
1XGROUP HELP
XINFO
最早可用版本:5.0.0
时间复杂度:O(N),N是CONSUMERS和GROUPS返回的item数量
用法:XINFO [CONSUMERS key groupname] [GROUPS key][STREAM key] [HELP]
这个命令用于返回stream和相关消费者组的不同信息。它有三种形式。
XINFO STREAM
这个命令返回stream的通用信息
XINFO GROUPS
这个命令用于获得stream相关的消费者组的信息
XINFO CONSUMERS
这个命令返回指定消费者组的消费者列表
XLEN
最早可用版本:5.0.0
时间复杂度:O(1)
返回stream中的entry数量。如果key不存在,则返回0。对于长度为0的stream,Redis不会删除,因为可能存在关联的消费者组。
XPENDING
最早可用版本:5.0.0
时间复杂度:O(N),N是返回的元素数量
用法:XPENDING key group [start end count] [consumer]
通过消费者组捕获数据,但不是确认这些数据。
XPENDING命令是检查待处理消息列表的接口,用于观察和了解消费者组正在发生的事情:哪些客户端是活跃的,哪些消息等待消费,或者查看是否有空闲的消息。这个命令通常与XCLAIM一起使用,用于处理长时间未被处理的消息。
这个命令的返回值是:
1> XPENDING mystream group55 - + 10
21) 1) 1526984818136-0
3 2) "consumer-123"
4 3) (integer) 196415
5 4) (integer) 1
其中包括:
消息ID
获取并要确认消息的消费者名称
自上次消息传递给消费者以来经过的毫秒数
该消息被传递的次数
XRANGE
最早可用版本:5.0.0
时间复杂度:O(N),N是返回的元素数量
用法:XRANGE key start end [COUNT count]
该命令用于返回stream中指定ID范围的数据,可以使用-和+表示最小和最大ID。ID也可以指定为不完全ID,即只指定Unix时间戳,就可以获取指定时间范围内的数据。
XREAD
最早可用版本:5.0.0
时间复杂度:O(N),N是返回的元素数量
用法:XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key …] ID [ID …]
从一个或多个stream中读取数据,仅返回ID大于调用者报告的最后接收ID的条目。
BLOCK项用于指定阻塞时长。STREAMS项必须在最后,用于指定stream和ID。
XREADGROUP
最早可用版本:5.0.0
时间复杂度:O(log(N)+M) ,N是返回的元素数量,M是一个常量。
用法:XREADGROUPGROUP group consumer [COUNT count] [BLOCK milliseconds] STREAMS key [key …] ID [ID …]
XREADGROUP是XREAD的特殊版本,支持消费者组。
XREVRANGE
最早可用版本:5.0.0
时间复杂度:O(log(N)+M) ,N是返回的元素数量,M是一个常量。
此命令与XRANGE唯一的区别是顺序相反。
XTRIM
最早可用版本:5.0.0
时间复杂度:O(log(N)+M) ,N是返回的元素数量,M是一个常量。
用法:XTRIM key MAXLEN [~] count
该命令用于裁剪流为指定数量的项目。这个命令被设计为接受多种策略,但目前只实现了MAXLEN一种。
如果要裁剪到stream中最新的1000个项目:
1XTRIM mystream MAXLEN 1000
可以使用以下形式提高效率:
1XTRIM mystream MAXLEN ~ 1000
~表示用户不需要精确的1000个项目,可以多出几十个,但是不能少于1000.
Redis命令详解:Streams相关推荐
- Redis命令详解:Connection
最近在学习Redis的相关知识,上一篇我们也介绍了Redis的安装方法和基本数据结构,后面就打算开一个新的系列文章:Redis命令详解.既是对基础的巩固,也是为了以后查询起来更方便. 整个系列会分为以 ...
- Redis命令详解:Hashs
Hash是一种String类型的field.value的映射表,因此,它非常适合存储对象.下面我们来一一介绍与Hash相关的命令. HDEL 最早可用版本:2.0.0 时间复杂度:O(N),其中N为要 ...
- redis命令详解与使用场景举例——Server(服务器)
BGREWRITEAOF 执行一个 AOF文件 重写操作.重写会创建一个当前 AOF 文件的体积优化版本. 即使 BGREWRITEAOF 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 B ...
- Redis命令详解:Server
Redis命令学习,服务器篇 BGREWRITEAOF 最早可用版本:1.0.0 使Redis重写AOF文件,重写后的AOF文件相较于当前版本的AOF文件占用的空间更小.即使重写失败,数据也不会丢失, ...
- Redis命令详解:Cluster
前文中我们介绍过了Redis的三种集群方案,没有了解过的同学可以自行前往.今天要介绍的Redis的亲儿子Cluster相关的命令. CLUSTER ADDSLOTS 最早可用版本:3.0.0 时间复杂 ...
- Redis命令详解:Geo
Redis Geo相关命令. GEOADD 最早可用版本:3.2.0 时间复杂度:O(log(N)),N是Sorted set元素数量 用法:GEOADDkey longitude latitude ...
- Redis命令详解:Pub/Sub
Redis发布订阅模式相关命令. PSUBSCRIBE 最早可用版本:2.0.0 时间复杂度:O(N),N是已订阅的客户端数. 订阅给定规则的客户端,支持的形式包括: h?llo 订阅hello,ha ...
- Redis命令详解:Transactions
Redis的事务和我们常见的数据库的事务最大的区别就是,Redis的事务中如果有一个命令执行失败,其他命令仍然可以执行成功.Redis的事务以MULTI开始,由EXEC触发.在EXEC前的操作都将被放 ...
- Redis命令详解:HyperLogLog
HyperLogLog是Redis的高级数据结构,它在做基数统计的时候非常有用,每个HyperLogLog的键可以计算接近264不同元素的基数,而大小只需要12KB. HyperLogLog目前只支持 ...
最新文章
- bash脚本之for语句if语句以及各种测试语句(2)
- Mybatis的修改列与重命名
- Git的思想和基本工作原理
- linux mysql软件_「Linux」 - 常用软件安装-MySql
- WindowsXP 系统登陆原理及其验证机制概述
- Smarty模板引擎技术二
- java与android https,Java-Android SSL https发布
- python下载过程中最后一步执行opencv出错怎么回事_PyCharm安装opencv-python和opencv-contrib-python的一些问题和解决方法_2018-09-27...
- python图像风格迁移教程_【人工智能】python图像风格迁移,来欣赏梵高风格的石原里美吧!...
- 杰里之 2M 的 SDK 开蓝牙一拖二出现奇怪的问题【篇】
- 小型网络游戏实例(vc++)——网络五子棋
- CleanMyMac X4.11.2免费版专业的Mac电脑清理软件
- 1.1版走迷宫小游戏(C++)
- ie 11 打印 iframe 404 降级解决方案
- 宏的录制以及在Visual Basic中显示代码
- 外网业务访问故障,ping时通时断,显示有请求超时time out处理过程
- EditPlus 横竖转换
- 1047 编程团体赛
- 虚拟机创建静态ip连接到外网
- php mysql知识总结,PHP MySQL基础知识