- 用法
-
XDEL key ID [ ID ... ]
- 复杂度
- 对于流中要删除的每个单个项,复杂度为 O(1),与流的大小无关。
- 自
- 5.0.0
- ACL 类别
- @stream, @write, @fast
从流中移除指定的条目,并返回已删除的条目数量。如果某些指定的 ID 在流中不存在,则此数量可能少于传递给命令的 ID 数量。
通常您可能会认为流是一种只追加的数据结构,但流在内存中表示,因此我们也能够删除条目。例如,这可能有助于遵守某些隐私政策。
理解条目删除的底层细节
流以一种内存高效的方式表示:使用基数树来索引宏节点,这些宏节点线性地打包数十个流条目。通常,当您从流中删除条目时,该条目并不会被真正驱逐,它只是被标记为已删除。
最终,如果宏节点中的所有条目都被标记为已删除,则整个节点将被销毁并回收内存。这意味着,如果您从流中删除大量条目,例如超过流中已追加条目总数的 50%,则每个条目的内存使用量可能会增加,因为流会变得碎片化。但是,流的性能将保持不变。
在 Valkey 的未来版本中,如果给定宏节点达到一定数量的已删除条目,我们可能会触发节点垃圾回收。目前,考虑到我们对这种数据结构的预期用途,增加这种复杂性并不是一个好主意。
示例
> 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 回复
整数回复:已删除的条目数量。