1. 简介
- 流是使用Redis实现消息队列应用的最佳选择
- 流是一个包含零个或任意多个流元素的有序队列,队列中的每个元素都包含一个ID和任意多个键值对,这些元素会根据ID的大小在流中有序地进行排列
2. xadd
xadd stream id field value [field value]
:将一个带有指定ID以及包含指定键值对的元素追加到流的末尾
流元素id
-
流元素的ID由毫秒时间(millisecond)和顺序编号(sequcen number)两部分组成
-
毫秒时间是UNIX时间戳,以0为起始值的顺序编号则用于区分同一时间内产生的多个不同元素
不完整的流id
- 只给出毫秒时间,Redis会自动将ID的顺序编号部分设置为0
流元素id的限制
-
newTime>oldMaxTime: 允许添加
-
newTimeM<=oldMaxTime&&newNum>oldNum: 允许添加
-
其他情况都不允许添加
自动生成元素id
- 将符号*用作id参数的值时,Redis将自动为新添加的元素生成一个可用的新ID
- 如果在当前毫秒之内还没有出现过任何ID,那么新ID的顺序编号将被设置为0
- 如果在当前毫秒内已经存在其他ID,那么这些ID中顺序编号最大的那个加上1就是新ID的顺序编号
限制流的长度
2. xtrim
xtrim strem maxlen n
:执行XTRIM命令直接将流修剪至指定长度
XTRIM命令与带有MAXLEN选项的XADD命令一样,都是根据先进先出规则来淘汰旧元素的
3. xdel
xdel stram [id id id]
:接受一个流以及任意多个元素ID作为输入,并从流中移除ID对应的元素
4. xlen
xlen stream
:对流执行XLEN命令,获取流目前包含的元素数量
- 流不存在,或者流中没有元素返回0
5. xrange/xrevrange
xrange stream start-id end-id [count n]
:获取指定id范围内的元素
-
获取指定id的单个元素(设置起始结束id相同)
-
获取指定id范围内的元素
-
获取所有元素
-
限制数量
xrange stream start-id end-id [count n] 是XRANGE命令的逆序版本,除了会按照ID从大到小而不是从小到大的顺序访问流元素之外,其他作用是相同的
6. xread
xread [block ms] [count n] streams stream1 stream2...id1 id2...
- 只能从一个方向对流进行迭代
- 支持同时对多个流进行迭代
- 能够以阻塞和非阻塞两种方式执行
-
从多个流中获取大于指定id的元素
-
阻塞
xread [block ms] [count n] streams stream1 stream2...id1 id2...
有一个或多个流拥有符合条件、可供读取的元素,那么XREAD命令将直接返回这些元素而不会进入阻塞状态
-
获取新的元素
将$符号用作ID参数的值,XREAD命令就会只获取给定流在命令执行之后新出现的元素