【问题标题】:Will Redis maxmemory-policy volatile-lru evict if nothing is past expired date?如果没有过期日期,Redis maxmemory-policy volatile-lru 会驱逐吗?
【发布时间】:2015-04-20 22:22:44
【问题描述】:

我有一个将maxmemory-policy 设置为volatile-lru 的redis 服务器。文档表明,当达到内存限制时,这将从设置过期的条目集中驱逐。

在这种情况下,redis 是否只会驱逐过期的项目?如果内存中的所有内容都设置了过期时间,但没有任何内容超过过期时间,那么当达到最大内存时,是否会驱逐任何内容?

【问题讨论】:

    标签: caching redis amazon-elasticache


    【解决方案1】:

    如果您的驱逐策略设置为任何volatile-* 策略,当内存不足且没有要驱逐的易失性密钥时,Redis 将返回 OOM 错误。

    【讨论】:

    • 谢谢。只是为了澄清一下:如果所有易失性密钥都在未来过期,这是否意味着没有可驱逐的易失性密钥?即只能考虑驱逐过期的密钥吗?
    • 否 - 一旦使用 TTL 设置密钥,它就被认为是易失的(并且将成为 volatile-* 策略下驱逐的候选者)。当易失性密钥过期时,它不再存在,因此无法再被驱逐。
    • 好的,所以如果我所有的密钥都在未来过期(易失性),当内存达到最大值时,如果设置了易失性 LRU,它仍然应该开始驱逐最旧的。
    • 请说明如果 TTL 显式设置为 -1 会发生什么?根据我的经验,像这样设置的键不符合 volatile-* 驱逐的条件。
    • @keithl8041我不知道直接将密钥的 TTL 设置为任何值的方法,它由 EXPIRE/PEXPIRE/SET .. EX 命令间接控制并提供负值导致立即到期。
    猜你喜欢
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 2023-03-14
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    相关资源
    最近更新 更多