我刚刚意识到只有一个消费者组存在时,XACK 不会自动删除消息。
我以为当所有消费者组都确认相同的消息时,该消息将被 Redis-server 删除,但似乎并非如此。
因此,Redis 流内存无限增加,因为不会删除任何消息。
也许防止这种情况的唯一方法是手动 XDEL 消息?但是我怎么知道所有的消费者群体都已经确认了这个消息呢?
需要帮助,谢谢!
我刚刚意识到只有一个消费者组存在时,XACK 不会自动删除消息。
我以为当所有消费者组都确认相同的消息时,该消息将被 Redis-server 删除,但似乎并非如此。
因此,Redis 流内存无限增加,因为不会删除任何消息。
也许防止这种情况的唯一方法是手动 XDEL 消息?但是我怎么知道所有的消费者群体都已经确认了这个消息呢?
需要帮助,谢谢!
Redis 流主要是一种仅附加的数据结构。可以使用该XDEL
命令删除条目,但这并不一定会释放条目使用的内存:
> XDEL mystream 1538561700640-0
(integer) 1
您还可以使用to 选项或显式使用命令以任意阈值限制流:MAXLEN
XADD
XTRIM
> XADD mystream MAXLEN 1000 * value 1
1526654998691-0
...
> XLEN mystream
(integer) 1000
但是我怎么知道所有的消费者群体都已经确认了这个消息呢?
XPENDING
您可以使用以下命令检查每个消费者组的待处理消息列表:
> XPENDING mystream mygroup
1) (integer) 1
2) 1526984818136-0
3) 1526984818136-0
4) 1) 1) "consumer-1"
2) "1"