【发布时间】:2019-08-08 06:39:35
【问题描述】:
我正在将事件写入 Redis Stream。 但我只想保留最后 48 小时的事件。 根据 Redis 文档,我看到我只能使用 MAXLEN 来管理我的列表大小,它受记录数影响,而不是受时间范围影响。 有什么方法可以使用 XADD 功能,但要限制过去 48 小时内最旧的插入记录? 感谢您的帮助!
【问题讨论】:
标签: performance redis
我正在将事件写入 Redis Stream。 但我只想保留最后 48 小时的事件。 根据 Redis 文档,我看到我只能使用 MAXLEN 来管理我的列表大小,它受记录数影响,而不是受时间范围影响。 有什么方法可以使用 XADD 功能,但要限制过去 48 小时内最旧的插入记录? 感谢您的帮助!
【问题讨论】:
标签: performance redis
这还不清楚。我不喜欢对流进行时间限制的普通方式,即“通过<seconds> 修剪”,因为这意味着如果在 XADD-ing 项目的过程中存在延迟,稍后下一个 XADD 将不得不驱逐事情可能持续几秒钟,导致延迟峰值。此外,它在语义上没有多大意义。您真正的“上限资源”是内存,因此过去要存储多少项目与您可以存储多少项目并不那么重要,因此项目数量限制更有意义。然而,在某些应用程序中,有多个流的插入率在不同的生产者之间变化很大,按时间限制是有意义的,以避免在某些每单位时间发出很少条目的生产者中浪费内存。也许在某个时候我会添加一些“尽力而为”的时间上限,它不会做超过给定数量的工作,但最终将能够修剪流,给定足够的 XADD 调用。
【讨论】:
AFAIK 还没有。有关于添加时间戳上限的讨论(对 XADD,也可能对 XTRIM),但看起来这个功能并没有在最新的候选版本中实现。
【讨论】:
nodejs 中基于修剪到指定键的可能解决方案(不是按时间本身)。
https://gist.github.com/jakelowen/22cb8a233ac0cdbb8e77808e17e0e1fc
概念证明。未经实战测试。
【讨论】: