REDIS:自动设置新添加的键的到期时间

我目前正在研究如何更有效地使用Redis。

在通过互联网进行调查后,我发现,使Redis更有效的一种方法是在服务器上为所有创建的密钥设置到期时间。 我目前正在将数据从Java程序加载到Redis中,但是我想在服务器端设置所有密钥的到期时间,而不是从Java程序中设置“ EXPIRE”命令。

我想知道是否有任何设置在REDIS服务器上添加新键(或所有键)并设置10分钟的到期时间的方法。当前,“ EXPIRE”命令需要提供特定的密钥。

我有一个想法是创建一个LUA脚本,该脚本会扫描具有TTL的所有键。如果TTL为-1,则设置到期时间。不过,该脚本必须定期运行。

另一个问题是,是否有更好/更有效的方法来完成此操作?

预先致谢。

点赞
用户8378364
用户8378364

你可以创建一个脚本来实现删除一周内的所有key(使用Python):

for key in redis.keys('*'):
    if redis.ttl(key) == -1:
        redis.expire(key, 604800)
2017-08-09 20:13:35
用户2754507
用户2754507

你可以设置一个内存限制,当达到该限制时,所有的键都会被清除。这可能会回答你的问题,因为实际上你无法控制TTL。

文档中可以看到:

如果你计划将Redis仅用作一个设置了过期时间的缓存,你可以考虑使用以下配置替代(假设最大内存限制为2兆字节):

maxmemory 2mb
maxmemory-policy allkeys-lru

另请参阅[将Redis用作LRU缓存的详细说明](https://redis.io/topics/lru-cache):它建议`allkeys-lru`比设置过期更节省内存。从同一文档中,您还可以尝试`volatile-ttl`策略,而不是`allkeys-lru`;那更接近你可能想要的。

2017-08-09 20:26:41
用户2923683
用户2923683

作为其他答案的替代方案,如果你只想省略额外的命令,并且只进行基本的 SET 操作,那么可以使用 SETEX 命令,它是 SETEXPIRE 的结合体,可能是你想要的。

https://redis.io/commands/setex

SETEX key seconds value

2017-10-12 10:17:59
用户9662626
用户9662626

在redis-cli中,您可以执行以下操作:

SETEX keyhere seconds valuehere //变量nnog的例子
SET keyhere valuehere EX seconds   //扩展版本

在处理实时数据时,它非常方便。

但是,请记住Redis将来可能会弃用SETEX

根据他们的说法:

注意:由于SET命令选项可以替换SETNX、SETEX、PSETEX,因此在Redis的未来版本中,这三个命令可能会被弃用并最终被删除。

链接在这里:https://redis.io/commands/set

2020-06-03 12:23:30