XTRIM
Syntax
XTRIM key <MAXLEN | MINID> [= | ~] threshold [LIMIT count]
- Available since:
- 5.0.0
- Time complexity:
- O(N), with N being the number of evicted entries. Constant times are very small however, since entries are organized in macro nodes containing multiple entries that can be released with a single deallocation.
- ACL categories:
-
@write
,@stream
,@slow
,
XTRIM
通过驱逐较旧的条目(具有较低ID的条目)来修剪流,如果需要的话。
可以使用以下策略之一来修剪流:
MAXLEN
: 当流的长度超过指定的threshold
时,驱逐条目,其中threshold
是一个正整数。MINID
: 驱逐ID低于threshold
的条目,其中threshold
是一个流ID。
例如,这将把流修剪为恰好最新的1000个项目:
XTRIM mystream MAXLEN 1000
在这个例子中,所有ID低于649085820-0的条目将被驱逐:
XTRIM mystream MINID 649085820
默认情况下,或者当提供可选的=
参数时,该命令执行精确修剪。
根据策略,精确修剪意味着:
MAXLEN
: 修剪后的流的长度将恰好是其原始长度和指定的threshold
之间的最小值。MINID
: 流中最旧的ID将恰好是其原始最旧ID和指定的threshold
之间的最大值。
几乎精确的修剪
因为精确修剪可能需要Redis服务器付出额外的努力,可以提供可选的~
参数来提高效率。
例如:
XTRIM mystream MAXLEN ~ 1000
在MAXLEN
策略和threshold
之间的~
参数意味着用户请求修剪流,使其长度至少为threshold
,但可能稍微多一些。
在这种情况下,当可以提高性能时(例如,当数据结构中的整个宏节点无法移除时),Redis会提前停止修剪。
这使得修剪更加高效,通常也是您想要的,尽管修剪后,流可能会有几十个额外的条目超过threshold
。
另一种在使用~
时控制命令工作量的方法是使用LIMIT
子句。
使用时,它指定将被驱逐的条目的最大count
。
当未指定LIMIT
和count
时,将隐式使用宏节点中条目数量的100倍作为count
的默认值。
将count
指定为0将完全禁用限制机制。
示例
RESP2/RESP3 回复
Integer reply: The number of entries deleted from the stream.历史
- 从 Redis 版本 6.2.0 开始:添加了
MINID
修剪策略和LIMIT
选项。