将 Redis 配置为仅将密钥保留过去一天



>我有一个应用程序将密钥写入 Redis,而没有指定密钥的过期时间。无法更改应用程序,但我想将 Redis 配置为仅保留过去 24 小时的密钥并删除旧密钥。

如何?

AFAIK 没有办法将 Redis 配置为仅保留过去 24 小时的密钥并删除旧密钥,正如您所说,至少您设置了一个 TTL,但您可以做一个技巧。

我假设您无法更改您告诉我们的应用程序中的任何内容......因此,您需要创建一个脚本/命令/应用程序,该脚本/命令/应用程序每隔一小时间间隔(例如 1 分钟)连接到 Redis 服务器。时间间隔将取决于您假设在 Redis 中平均有多少个密钥。

该应用程序很简单,您只需遍历所有键并使用三个命令:

  • KEYS * -> 获取完整的密钥列表
  • TTL 密钥名称 -> 以了解密钥是否已分配过期时间。如果没有,它将返回 -1
  • 过期密钥名称 86400 -> 如果密钥尚未分配 TTL,则设置 24 小时的 TTL

因此,首次运行该命令时,Redis 中的所有当前密钥将需要 24 小时的 TTL,在此之后,它们将被删除。命令的第二次执行将仅将 24 小时 TTL 分配给命令第一次执行中不存在的新键,依此类推。

您必须考虑密钥的数量是否很大,大约数百万,您可能会遇到一些内存和性能问题,因此在这种情况下,我建议使用通配符检索密钥以按组获取密钥,例如 KEYS a* 或密钥 1*,具体取决于您使用键名的模式。在这里,您可以创建一个永不停止并为每个组不断迭代的守护进程。

不建议在生产环境中使用带有大量密钥的 KEYS 命令,但您可以使用我之前建议的这种解决方法。

若要在24 小时后使密钥过期,需要为每个密钥显式设置 TTL。

最新更新