【问题标题】:How does volatile-ttl work in Redis?volatile-ttl 如何在 Redis 中工作?
【发布时间】:2023-03-22 05:29:01
【问题描述】:

在 Redis.conf 中,提供了各种关键的驱逐策略,以及它们如何工作的一些基础知识。

我想我想使用volatile-ttl,但我找不到足够的信息来说明它是如何工作的。

从表面上看,很明显;具有最近到期时间的密钥首先出现。如果 Redis 驱逐具有过期时间的 所有 键怎么办?假设它仍然需要继续驱逐以保持在maxmemory 之下,那么它在驱逐旁边选择什么?

# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
# is reached. You can select among five behaviors:
#
# volatile-lru -> remove the key with an expire set using an LRU algorithm
# allkeys-lru -> remove any key according to the LRU algorithm
# volatile-random -> remove a random key with an expire set
# allkeys-random -> remove a random key, any key
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# noeviction -> don't expire at all, just return an error on write operations

【问题讨论】:

    标签: redis


    【解决方案1】:

    volatile-ttl 策略将根据 TTL 升序逐出所有易失性密钥(即设置为过期的密钥)。当没有更多易失性密钥(即所有剩余的密钥都是非易失性的)并假设 RAM 压力继续存在时,不会发生进一步的驱逐,Redis 将回复 OOM(内存不足)错误。

    【讨论】:

    【解决方案2】:

    会抛出内存不足的错误

     127.0.0.1:6379[2]> info memory
    # Memory
    used_memory:2091560
    used_memory_human:1.99M
    used_memory_rss:4022272
    used_memory_rss_human:3.84M
    used_memory_peak:2097296
    used_memory_peak_human:2.00M
    total_system_memory:16712204288
    total_system_memory_human:15.56G
    used_memory_lua:37888
    used_memory_lua_human:37.00K
    maxmemory:2097152
    maxmemory_human:2.00M
    maxmemory_policy:volatile-lru
    mem_fragmentation_ratio:1.92
    mem_allocator:libc
    127.0.0.1:6379[2]> set q1 as;ldkfjaaaaaaaaaaaaaaaaaaajjjjjjjjjjjjjjjjjjjjjjjjjjjsssssssssssssssssssssssasdfasdlfkjhasdkjfhas;djkfhsad;kfjas;dhflaskjdfhlksajdhf;asjdhf;sadkjf;jsadhflkjshadf;kjahsdlfkjhasdlkjfhsak;djfhas;kdjhfsajkdfhkasj;dhf;aksjdhf;jasdfh;jksadhfkjas;dhfk;jasdfh;asjdfh;sjdahfjkasdhf;kjsadhf;kjsadhf;jashdf;jsdahfjk;hads;fkjhsad;fjhasd;jfhas;dfhsa;dhfsa;jdkfhasdkjfhlskajdh;kjhf;akjshdf;asjkdhf;asdjkhf;sjadhf;jsadhf;jsdhf;jsahdf;jsahdf;jhasd;fjhsad;jfha;sdjfhsad;jfhsadj;fhas;jdkfhsad;kjfh;asjdhf;ajsdhf;jasfdhas;ldkfjaaaaaaaaaaaaaaaaaaajjjjjjjjjjjjjjjjjjjjjjjjjjjsssssssssssssssssssssssasdfasdlfkjhasdkjfhas;djkfhsad;kfjas;dhflaskjdfhlksajdhf;asjdhf;sadkjf;jsadhflkjshadf;kjahsdlfkjhasdlkjfhsak;djfhas;kdjhfsajkdfhkasj;dhf;aksjdhf;jasdfh;jksadhfkjas;dhfk;jasdfh;asjdfh;sjdahfjkasdhf;kjsadhf;kjsadhf;jashdf;jsdahfjk;hads;fkjhsad;fjhasd;jfhas;dfhsa;dhfsa;jdkfhasdkjfhlskajdh;kjhf;akjshdf;asjkdhf;asdjkhf;sjadhf;jsadhf;jsdhf;jsahdf;jsahdf;jhasd;fjhsad;jfha;sdjfhsad;jfhsadj;fhas;jdkfhsad;kjfh;asas;ldkfjaaaaaaaaaaaaaaaaaaajjjjjjjjjjjjjjjjjjjjjjjjjjjsssssssssssssssssssssssasdfasdlfkjhasdkjfhas;djkfhsad;kfjas;dhflaskjdfhlksajdhf;asjdhf;sadkjf;jsadhflkjshadf;kjahsdlfkjhasdlkjfhsak;djfhas;kdjhfsajkdfhkasj;dhf;aksjdhf;jasdfh;jksadhfkjas;dhfk;jasdfh;asjdfh;sjdahfjkasdhf;kjsadhf;kjsadhf;jashdf;jsdahfjk;hads;fkjhsad;fjhasd;jfhas;dfhsa;dhfsa;jdkfhasdkjfhlskajdh;kjhf;akjshdf;asjkdhf;asdjkhf;sjadhf;jsadhf;jsdhf;jsahdf;jsahdf;jhasd;fjhsad;jfha;sdjfhsad;jfhsadj;fhas;jdkfhsad;kjfh;asas;ldkfjaaaaaaaaaaaaaaaaaaajjjjjjjjjjjjjjjjjjjjjjjjjjjsssssssssssssssssssssssasdfasdlfkjhasdkjfhas;djkfhsad;kfjas;dhflaskjdfhlksajdhf;asjdhf;sadkjf;jsadhflkjshadf;kjahsdlfkjhasdlkjfhsak;djfhas;kdjhfsajkdfhkasj;dhf;aksjdhf;jasdfh;jksadhfkjas;dhfk;jasdfh;asjdfh;sjdahfjkasdhf;kjsadhf;kjsadhf;jashdf;jsdahfjk;hads;fkjhsad;fjhasd;jfhas;dfhsa;dhfsa;jdkfhasdkjfhlskajdh;kjhf;akjshdf;asjkdhf;asdjkhf;sjadhf;jsadhf;jsdhf;jsahdf;jsahdf;jhasd;fjhsad;jfha;sdjfhsad;jfhsadj;fhas;jdkfhsad;kjfh;as
    (error) OOM command not allowed when used memory > 'maxmemory'.
    

    【讨论】:

      猜你喜欢
      • 2020-03-01
      • 1970-01-01
      • 2015-08-16
      • 2022-10-05
      • 2021-10-18
      • 2013-03-29
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      相关资源
      最近更新 更多