首页 文章

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

提问于
浏览
2

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

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

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

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

另一个问题是,是否有更好/更有效的方法来做到这一点?

提前致谢 .

3 回答

  • 0

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

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

    作为其他答案的替代方案,如果're only looking to save the extra command, and you'仅执行基本 SET ,那么 SETEX 命令可能是您正在寻找的组合 SETEXPIRE .

    https://redis.io/commands/setex

    SETEX key seconds value

  • 2

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

    来自docs

    如果您计划将Redis用作每个密钥都有过期设置的缓存,您可以考虑使用以下配置(假设最大内存限制为2兆字节为例):maxmemory 2mb
    maxmemory-policy allkeys-lru

    另请参阅Using Redis as an LRU cache的详细说明:它表明 allkeys-lru 比设置过期更有效 . 从同一个文档中,您还可以尝试 volatile-ttl 策略而不是 allkeys-lru ;这更接近你可能想要的

相关问题