我正在玩 redis 流,到目前为止还不错。我试图了解是否有任何方式让我根据时间或其他方式使旧事件过期。我知道我们可以通过事件 ID 删除。但我不想记住/存储很难的事件ID。相反,我正在寻找一种方法来删除最后的 10K 事件或类似的东西。
问问题
1951 次
2 回答
3
到目前为止,还没有办法按时间使事件过期。相反,唯一的过期策略是通过保留最新的 N 个事件来使事件过期。您可以使用XTRIM 命令驱逐旧事件。
我应该这样做吗?可以将流配置为保留最后 N 个事件吗?
如果您想始终保留最新的 N 个事件,您可以调用XADD 命令并MAXLEN
选择获取上限流。此外,通过~
选项,您可以获得更好的性能,但不准确地过期事件。检查文档以获取详细信息。
更新
从 Redis 6.2 开始,XTRIM
支持一种新的修剪策略:MINID
. 使用此策略,Redis 将驱逐 id 低于给定的条目threshold
。
因此,如果您使用时间戳作为条目 id,例如默认自动生成的 id 使用 Unix 时间戳(以毫秒为单位)作为 id 的一部分,您可以使用此策略根据时间使事件过期,即删除比给定时间戳更旧的事件.
于 2020-04-02T05:30:08.850 回答
3
从 Redis 6.2 开始,这是可能的。
如果您使用默认事件 ID(通过*
作为 ID 传递给XADD
),它们将以插入事件时的 UNIX 时间戳开头,后跟一个破折号。
然后您可以使用XTRIM $stream_name MINID $timestamp
删除所有 ID 低于 '$timestamp' 的事件,这相当于所有早于时间戳的事件。
于 2021-06-25T14:41:11.940 回答