XDEL

Syntax
XDEL key id [id ...]
Available since:
5.0.0
Time complexity:
O(1) for each single item to delete in the stream, regardless of the stream size.
ACL categories:
@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 回复

Integer reply: the number of entries that were deleted.
RATE THIS PAGE
Back to top ↑