Redis Stream管理时间范围

时间:2018-07-04 07:38:08

标签: performance redis

我正在将事件写入Redis Stream。 但我只想保留过去48小时的活动。 根据Redis文档,我看到我只能使用MAXLEN来管理列表大小,这不受记录数的影响,而不受时间范围的影响。 有什么办法可以使用XADD函数,但是可以限制最近48小时内最古老的插入记录? 感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

这还不清楚。我不喜欢用时间限制流的普通方式,即“用<seconds>修剪”,因为这意味着如果XADD处理项目过程中存在延迟,则下一个XADD将具有驱逐事物几秒钟,从而导致延迟峰值。此外,从语义上讲,它没有多大意义。真正的“上限资源”是内存,因此过去要存储多少项与 可以存储多少项并不重要,因此限制项目数更为合理。但是,在某些应用程序中,插入流的插入速率在不同的生产者之间存在很大差异的某些应用程序中,可以按时间限制上限,以避免浪费某些生产者的内存,这些生产者每单位时间只发送很少的条目。也许到某个时候,我会添加一些“尽力而为”的时间上限,该工作上限不会超过给定的数量,但是在有足够的XADD调用的情况下,最终将能够削减数据流。

答案 1 :(得分:1)

AFAIK尚未。曾经有过关于添加时间戳上限的讨论(向XADD添加时间戳,也可能向XTRIM添加时间戳),但是最新发布的候选版本似乎并未实现此功能。

答案 2 :(得分:0)

基于修整到指定键(本身不准时)的nodejs中可能的解决方案。

https://gist.github.com/jakelowen/22cb8a233ac0cdbb8e77808e17e0e1fc

概念证明。未经战斗测试。