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。 当未指定LIMITcount时,将隐式使用宏节点中条目数量的100倍作为count的默认值。 将count指定为0将完全禁用限制机制。

示例

XADD mystream * field1 A field2 B field3 C field4 D XTRIM mystream MAXLEN 2 XRANGE mystream - +

RESP2/RESP3 回复

Integer reply: The number of entries deleted from the stream.

历史

  • 从 Redis 版本 6.2.0 开始:添加了 MINID 修剪策略和 LIMIT 选项。
RATE THIS PAGE
Back to top ↑