volatile-ttl如何在Redis中运行?

时间:2016-07-08 14:48:49

标签: redis

在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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

会抛出内存不足错误

 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'.