XDEL

语法
XDEL key id [id ...]
可用版本
Redis 开源版 5.0.0
时间复杂度
对于流中删除的每个单独项,无论流大小如何,时间复杂度都是 O(1)。
ACL 类别
@write, @stream, @fast,

从流中移除指定的条目,并返回已删除的条目数量。如果流中不存在某些指定的 ID,则此数量可能小于传递给命令的 ID 数量。

通常,您可能认为 Redis 流是一种仅追加的数据结构,但 Redis 流在内存中表示,因此我们也可以删除条目。例如,这对于遵守某些隐私政策可能很有用。

理解条目删除的底层细节

Redis 流的表示方式使其内存效率很高:使用基数树来索引宏节点,这些宏节点线性打包数十个流条目。通常,从流中删除条目时,该条目并不会*真正*被逐出,它只是被标记为已删除。

最终,如果宏节点中的所有条目都被标记为已删除,则整个节点将被销毁并回收内存。这意味着如果您从流中删除大量条目,例如超过追加到流中条目数量的 50%,则每个条目的内存使用量可能会增加,因为这会导致流变得碎片化。但是,流的性能将保持不变。

在未来的 Redis 版本中,如果给定的宏节点达到一定数量的已删除条目,我们可能会触发节点垃圾回收。目前根据我们对这种数据结构的预期用途,增加这种复杂性不是一个好主意。

示例

> XADD mystream * a 1
1538561698944-0
> XADD mystream * b 2
1538561700640-0
> XADD mystream * c 3
1538561701744-0
> XDEL mystream 1538561700640-0
(integer) 1
127.0.0.1:6379> XRANGE mystream - +
1) 1) 1538561698944-0
   2) 1) "a"
      2) "1"
2) 1) 1538561701744-0
   2) 1) "c"
      2) "3"

RESP2/RESP3 回复

整数回复:已删除的条目数量。
评价本页
回到顶部 ↑