XTRIM

语法
XTRIM key <MAXLEN | MINID> [= | ~] threshold [LIMIT count]
可用版本
Redis 开源版 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 会完全禁用限制机制。

示例

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

RESP2/RESP3 回复

整数回复:从流中删除的条目数量。

历史

  • 从 Redis 6.2.0 版本开始:添加了 MINID 修剪策略和 LIMIT 选项。
评价本页
返回顶部 ↑