【问题标题】:Redis Stream Managing a time frameRedis Stream 管理时间范围
【发布时间】:2019-08-08 06:39:35
【问题描述】:

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

【问题讨论】:

    标签: performance redis


    【解决方案1】:

    这还不清楚。我不喜欢对流进行时间限制的普通方式,即“通过<seconds> 修剪”,因为这意味着如果在 XADD-ing 项目的过程中存在延迟,稍后下一个 XADD 将不得不驱逐事情可能持续几秒钟,导致延迟峰值。此外,它在语义上没有多大意义。您真正的“上限资源”是内存,因此过去要存储多少项目与您可以存储多少项目并不那么重要,因此项目数量限制更有意义。然而,在某些应用程序中,有多个流的插入率在不同的生产者之间变化很大,按时间限制是有意义的,以避免在某些每单位时间发出很少条目的生产者中浪费内存。也许在某个时候我会添加一些“尽力而为”的时间上限,它不会做超过给定数量的工作,但最终将能够修剪流,给定足够的 XADD 调用。

    【讨论】:

    • 嘿,我知道我有内存限制,时间框架可能会突破内存边界。但是,如果我知道插入率和内容大小,那么能够保持知道数据的时间范围可能会很好。也许为流添加最大内存大小可能会有所帮助。还添加 ~48 小时可以帮助改善性能问题,例如:MAXLEN ~10。我不明白什么是我现在可以使用的最佳方式,以保留过去 48 小时的记录。我可以在每次插入时获取超过 48 小时的记录并将其删除。我想这不是今天的最佳做法。谢谢!
    【解决方案2】:

    AFAIK 还没有。有关于添加时间戳上限的讨论(对 XADD,也可能对 XTRIM),但看起来这个功能并没有在最新的候选版本中实现。

    【讨论】:

      【解决方案3】:

      nodejs 中基于修剪到指定键的可能解决方案(不是按时间本身)。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-25
        • 2013-04-03
        • 2013-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多