配置Redis只保留过去一天的密钥

时间:2018-03-12 07:55:14

标签: configuration redis

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

怎么样?

2 个答案:

答案 0 :(得分:1)

要在24小时后使密钥失效,您需要为每个密钥明确设置TTL。

答案 1 :(得分:1)

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

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

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

  • KEYS * - >获取完整的密钥列表
  • TTL keyName - >知道密钥是否已分配到期时间。如果没有
  • ,它将返回-1
  • EXPIRE keyName 86400 - >如果密钥没有分配TTL,则设置24小时的TTL

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

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

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