REDIS:自动设置新添加的密钥到期

时间:2017-08-09 20:02:39

标签: lua redis stackexchange.redis

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

在互联网上进行研究后,我发现有效使用Redis的方法之一是在服务器上创建的所有密钥上设置到期时间。 我目前正在将数据从Java程序加载到Redis中,但是我不想在Java程序中设置EXPIRE命令,而是要设置服务器端所有密钥的到期时间。 / p>

我想知道是否有任何方法可以设置任何新的KEYS(或所有密钥)添加到REDIS服务器,到期时间为10分钟。目前,EXPIRE命令要求您提供特定密钥。

我的一个想法是创建一个LUA脚本,用脚本TTL扫描所有键。如果TTL为-1,则设置到期日。这个脚本必须定期运行。

另一个问题是,有更好/更有效的方法吗?

提前致谢。

4 个答案:

答案 0 :(得分:2)

您可以设置内存限制,并在达到该限制时逐出所有密钥。这可能会也可能不会回答您的问题,因为您实际上并没有控制TTL

来自docs

  

如果您计划将Redis用作每个键都有的缓存    到期设置,您可以考虑使用以下配置    (假设最大内存限制为2兆字节):

maxmemory 2mb
maxmemory-policy allkeys-lru

另请参阅有关Using Redis as an LRU cache的详细说明:它表明allkeys-lru比设置过期更有效。在同一个文档中,您还可以尝试使用volatile-ttl政策而不是allkeys-lru;那更接近你想要的东西

答案 1 :(得分:1)

As an alternative to the other answers, if you're only looking to save the extra command, and you're only doing basic SETs, then there is the SETEX command that is a combination SET and EXPIRE that might be what you're looking for.

https://redis.io/commands/setex

SETEX key seconds value

答案 2 :(得分:0)

你可以创建一个脚本来做这样的事情来删除一周内的所有键(python):

for key in redis.keys('*'):
    if redis.ttl(key) == -1:
        redis.expire(key, 604800)

答案 3 :(得分:0)

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

+---------+-----+--------+
|  Name   | Age | Oldest |
+---------+-----+--------+
| John    | 22  | NULL   |
| John    | 25  | NULL   |
| James1  | 34  | NULL   |
+---------+-----+--------+

在处理实时数据时会派上用场。

不过,请记住,Redis将来可能会弃用SETEX keyhere seconds valuehere //nnog's example above SET keyhere valuehere EX seconds //extended version

据他们说:

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

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

相关问题