0

https://redis.io/topics/streams-intro#capped-streams文档提到了封顶流以防止内存过载:

...有时在流中最多包含给定数量的项目很有用,有时一旦达到给定大小,将数据从 Redis 移动到不在内存中的存储是很有用的...

然而,它只解释了 redis 修剪流的功能。我找不到任何概念或经过验证的方法来实际从 redis 移动数据。我知道我可以创建一个消费者来将所有事件移动到无限的地方,但上面引用的声明表明我应该能够以有效的方式只移动旧事件。你能分享一个解决方案的想法吗?

4

1 回答 1

0

IIUC 您要删除已使用的消息,用例可以是重播或将其存储为历史数据。

Redis 本身并没有提供将数据从任何 Redis 集合中移出的干净方法,封顶流只是意味着您可以修剪流,因为它可能导致内存不足。

最简单的方法是在归档组中添加一个消费者,该消费者将从流中消费并将此数据写入其他地方。消费者必须为所有需要归档的 Redis 流工作,这样您将始终在二级存储中拥有数据。

现在您需要一些修剪策略来修剪集合,最简单的方法可以像每天一样定期修剪它,请参阅我的其他答案 如何为 redis 流定义 TTL?

于 2020-08-29T14:51:29.183 回答