如何防止Redis流内存无限增加?

UNS*_*BLE 6 redis redis-streams

我刚刚意识到当只有一个消费者组时 XACK 不会自动删除消息。

我以为当所有消费者组确认同一条消息时,该消息将被 Redis-server 删除,但似乎并非如此。

因此,Redis 流内存会无限增加,因为不会删除任何消息。

也许防止这种情况的唯一方法是手动 XDEL 消息?但是我怎么知道所有的消费者组都确认了这个消息呢?

需要一些帮助,谢谢!

Eug*_*ash 8

Redis 流主要是一种仅附加的数据结构。可以使用以下XDEL命令删除条目,但这不一定会释放该条目使用的内存:

> XDEL mystream 1538561700640-0
(integer) 1
Run Code Online (Sandbox Code Playgroud)

您还可以使用选项或显式使用命令以任意阈值限制流:MAXLENXADDXTRIM

> XADD mystream MAXLEN 1000 * value 1
1526654998691-0
...
> XLEN mystream
(integer) 1000
Run Code Online (Sandbox Code Playgroud)

但我怎么知道所有消费者组都已经确认了该消息呢?

您可以使用以下命令检查每个消费者组的待处理消息列表XPENDING

> XPENDING mystream mygroup
1) (integer) 1
2) 1526984818136-0
3) 1526984818136-0
4) 1) 1) "consumer-1"
      2) "1"
Run Code Online (Sandbox Code Playgroud)