Redis 流 - 根据时间删除/过期事件

Redis streams - remove / expire events based on time

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

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

Should i do that very time? Can stream be configured to retain the last N events ?

如果你想一直保留最新的N个活动,可以来电XADD command with MAXLEN option to get a capped stream. Also with ~ option, you can have better performance, but inaccurately expire events. Check the doc了解详情

更新

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

的条目

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

从 Redis 6.2 开始这是可能的。

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

然后可以使用XTRIM $stream_name MINID $timestamp移除所有ID小于'$timestamp'的事件,相当于所有时间戳之前的事件。