简述Redis内存淘汰策略?
1.noeviction表示不淘汰数据,当缓存数据满了,有新的写请求进来,Redis不再提供服务(可读可删除),而是直接返回错误。(默认的淘汰策略)
2.根据过期时间的淘汰策略
volatile-random、volatile-ttl、volatile-lru、volatile-lfu 四种策略是针对已经设置了过期时间的键值对。到键值对的到期时间到了或者Redis内存使用量达到了maxmemory阈值,Redis会根据这些策略对键值对进行淘汰:
1)volatile-ttl 在筛选时,会针对设置了过期时间的键值对,根据过期时间的先后进行删除,越早过期的越先被删除。
2)volatile-random 就像它的名称一样,在设置了过期时间的键值对中,进行随机删除。
3)volatile-lru 会使用 LRU 算法筛选设置了过期时间的键值对。
4)volatile-lfu 会使用 LFU 算法选择设置了过期时间的键值对。
同时对于设置的过期时间的数据,因为Redis是单线程的,所以系统采用的策略为定期删除 和 惰性删除
1)定期删除(贪婪策略):
从过期字典中随机抽取20个键;
从20个key中删除过期的key;
如果过期key的比例超过1/4,请重复执行步骤1。
2)惰性删除:
当客户端访问数据时,redis检查数据的过期日期,如已过期删除它而不返回任何内容。
3.所有数据范围内的淘汰策略
allkeys-lru、allkeys-random、allkeys-lfu 这三种策略淘汰的数据范围扩大到所有的键值对,无论这些键值对是否设置了过期时间,筛选数据进行淘汰的规则是:
1)allkeys-random 策略,从所有键值对中随机选择并删除数据;
2)allkeys-lru 策略,使用 LRU 算法在所有数据中进行筛选。
3)allkeys-lfu 策略,使用 LFU 算法在所有数据中进行筛选。