这个https://redis.io/topics/streams-intro#capped-streams文档提到了用于防止内存过载的封顶流:
…有时在一个流中最多有一个给定数量的项是有用的,有时一旦达到一个给定的大小,将数据从redis移动到一个不在内存中的存储器是有用的。。。
不过,它只解释了redis在修整流方面的功能。我找不到任何概念或行之有效的方法来实际移动redis中的数据。我知道我可以创建一个消费者,将所有事件移动到无限的地方,但上面引用的语句表明,我应该能够以有效的方式只移动旧事件。你能分享一个解决方案吗?
1条答案
按热度按时间e5nszbig1#
iiuc如果您希望删除消耗的消息,用例可以是重播或将其存储为历史数据。
redis本身并没有提供一种干净的方法来将数据移出任何redis集合,capped stream只是意味着您可以修剪流,因为它可能导致内存不足。
最简单的方法是在存档组中添加一个使用者,该使用者将从流中消费数据并将这些数据写入其他地方。消费者必须为所有需要存档的redis流工作,这样,您将始终在辅助存储中拥有数据。
现在您需要一些修剪策略来修剪集合,最简单的方法是像每天一样定期修剪它。请参阅我的另一个答案如何为redis流定义ttl?