XTRIM
语法
XTRIM key <MAXLEN | MINID> [= | ~] threshold [LIMIT count]
- 自版本起
- 5.0.0
- 时间复杂度
- O(N),其中 N 是被驱逐的条目数。尽管如此,常数时间非常小,因为条目被组织在包含多个条目且可以通过单个释放操作释放的宏节点中。
- ACL 类别
-
@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 回复
整数回复:从流中删除的条目数。历史
- 从 Redis 6.2.0 版本开始:添加了
MINID
修剪策略和LIMIT
选项。