我目前正在研究redis如何更有效地使用它。
在互联网上进行研究后,我发现有效使用Redis的方法之一是在服务器上创建的所有密钥上设置到期时间。
我目前正在将数据从Java程序加载到Redis中,但是我不想在Java程序中设置EXPIRE
命令,而是要设置服务器端所有密钥的到期时间。 / p>
我想知道是否有任何方法可以设置任何新的KEYS(或所有密钥)添加到REDIS服务器,到期时间为10分钟。目前,EXPIRE
命令要求您提供特定密钥。
我的一个想法是创建一个LUA脚本,用脚本TTL扫描所有键。如果TTL为-1,则设置到期日。这个脚本必须定期运行。
另一个问题是,有更好/更有效的方法吗?
提前致谢。
答案 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 SET
s, 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的未来版本中,这三个命令可能会被弃用并最终删除。