问题描述
https://redis.io/topics/streams-intro#capped-streams文档中提到了有上限的流,以防止内存过载:
...有时,在流中最多具有给定数量的项目很有用,有时,一旦达到给定大小,将数据从Redis移至内存中没有的存储是很有用的。
但是,它仅说明了修剪流时的redis功能。我找不到任何概念或行之有效的方法来真正从Redis移走数据。我知道我可以创建一个消费者来将所有事件移到无限制的位置,但是上面引用的声明表明我应该能够以有效的方式仅移出旧事件。您能分享一个解决方案的想法吗?
解决方法
您正在寻找要删除消耗的消息的IIUC,用例可以是重播或将其存储为历史数据。
Redis不能提供一种将数据移出Redis集合的干净方法,带帽的流仅意味着您可以修剪流,因为它可能导致内存不足。
最简单的方法是在归档组中添加一个使用者,该使用者将从流中使用该使用者并将该数据写入其他地方。使用者必须为所有需要归档的Redis流工作,这样您将始终在辅助存储中存储数据。
现在,您将需要一些修剪策略以修剪集合,最简单的方法可以像每天一样定期修剪它,参见我的其他答案 How to define TTL for redis streams?