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进行访问的时候对它进行删除。