我有一个应用程序将密钥写入Redis而不指定密钥的过期。无法更改应用程序,但我想将Redis配置为仅保留过去24小时的密钥并删除旧密钥。
怎么样?
答案 0 :(得分:1)
要在24小时后使密钥失效,您需要为每个密钥明确设置TTL。
答案 1 :(得分:1)
AFAIK没有办法配置Redis只保留过去24小时的密钥并删除旧密钥,正如你所说,至少你设置了一个TTL,但你可以做一个技巧。
我假设您无法更改您告诉我们的应用程序中的任何内容...因此您需要创建一个脚本/命令/应用程序,每隔一小段时间间隔连接到Redis服务器,比方说,1分钟。时间间隔取决于您在Redis中平均拥有的密钥数量。
应用程序很简单,您只需迭代所有键并使用三个命令:
因此,当您第一次运行该命令时,Redis中的所有当前密钥将采用24小时的TTL,在此时间之后它们将被删除。第二次执行命令只会将24小时TTL分配给第一次执行命令时不存在的新密钥,依此类推。
你必须考虑如果密钥的数量是巨大的,大约几百万,你可能会遇到一些内存和性能问题所以在这种情况下,我建议使用通配符检索密钥以获取密钥组,如KEYS a *或键1 *,取决于您用于键名的模式。在这里,你可以创建一个永不停止的守护进程,并为每个组不断迭代。
在生产环境中不推荐使用带有大量键的KEYS命令,但您可以使用我之前建议的这种解决方法。