Redis的内存淘汰策略

Redis的内存淘汰策略

Redis是一个内存数据库,没法避免内存不足的情况

通过 maxmemory 来设置内存淘汰策略

redis.conf 中的配置项

 maxmemory-policy noeviction

 volatile-lru -> Evict using approximated LRU among the keys with an expire set.
 allkeys-lru -> Evict any key using approximated LRU.
 volatile-lfu -> Evict using approximated LFU among the keys with an expire set.
 allkeys-lfu -> Evict any key using approximated LFU.
 volatile-random -> Remove a random key among the ones 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 evict anything, just return an error on write operations.

可用的选项

volatile-lru

从设置了过期时间的数据,挑选最近最少使用的数据淘汰

volatile-ttl

从设置了过期时间的数据,挑选即将过期的数据进行淘汰

volatile-lfu

从设置了过期时间的数据,选择某段时间之内使用频次最小的键值对进行淘汰

volatile-random

从设置了过期时间的数据,随机选择数据淘汰

allkeys-lru

从所有数据里面,挑选最近最少使用的数据淘汰

allkeys-lfu

从所有数据里面,选择某段时间之内使用频次最少的键值对进行淘汰

allkeys-random

从所有数据里面,随机选择数据进行淘汰

noeviction (默认)

禁止淘汰数据,当内存不足的时候,抛出异常

关于定时Key的删除策略

定期删除

每隔 100ms 就随机抽取一批定时key,检查是否过期,如果过期就删除。之所以不不能遍历,是因为如果key数量庞大的话,这个遍历的过程就会很消费性能。

惰性删除

因为随机删除策略可能会导致某些已经过期了的key并没删除,于是惰性删除会在你对过期key进行访问的时候对它进行删除。