【问题标题】:Redis streams - remove / expire events based on timeRedis 流 - 根据时间删除/过期事件
【发布时间】:2020-07-12 17:14:15
【问题描述】:

我正在玩 redis 流,到目前为止还不错。 我试图了解是否有任何方法让我根据时间或其他方式使旧事件过期。 我知道我们可以通过事件 ID 删除。但我不想记住/存储很难的事件ID。相反,我正在寻找一种删除最后 10K 事件或类似事件的方法。

【问题讨论】:

  • 您可以尝试XTRIM命令来保留最新的N个事件,并删除旧的事件。
  • @for_stack,谢谢,我会尽力让你知道。但是,如果您认为这是可行的方法,请将其添加为答案。
  • 我应该这样做吗?可以将流配置为保留最后 N 个事件吗?

标签: redis redis-streams


【解决方案1】:

到目前为止,还没有办法按时间使事件过期。相反,唯一的过期策略是通过保留最新的 N 个事件来使事件过期。您可以使用XTRIM command 驱逐旧事件。

我应该这样做吗?可以将流配置为保留最后 N 个事件吗?

如果您想始终保留最新的 N 个事件,您可以使用 MAXLEN 选项调用 XADD command 以获取封顶流。同样使用~ 选项,您可以获得更好的性能,但不准确地过期事件。详情请查看doc

更新

从 Redis 6.2 开始,XTRIM 支持新的修剪策略:MINID。使用此策略,Redis 将驱逐 id 低于给定 threshold 的条目。

因此,如果您使用时间戳作为条目 ID,例如默认的,自动生成的 id 使用 Unix 时间戳(以毫秒为单位)作为 id 的一部分,您可以使用此策略根据时间使事件过期,即删除早于给定时间戳的事件。

【讨论】:

    【解决方案2】:

    这在 Redis 6.2 中是可能的。

    如果您使用默认事件 ID(通过将 * 作为 ID 传递给 XADD),它们将以插入事件时的 UNIX 时间戳开头,后跟一个破折号。

    那么你可以使用XTRIM $stream_name MINID $timestamp来移除所有ID低于'$timestamp'的事件,相当于所有比时间戳更早的事件。

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多