Redis内存淘汰策略

📅 2026/6/19 11:39:03
Redis内存淘汰策略
内存淘汰: 就是当Redis内存使用达到设置的阈值时Redis主动挑选部分key删除以释放更多内存的流程。Redis支持8种不同策略来选择要删除的key:noeviction:不淘汰任何key但是内存满时不允许写入新数据默认就是这种策略。volatile-ttl:对设置了TTL的key比较key的剩余TTL值TTL越小越先被淘汰allkeys-random:对全体key随机进行淘汰。也就是直接从db-dict中随机挑选volatile-random:对设置了TTL的key随机进行淘汰。也就是从db-expires中随机挑选。allkeys-lru:对全体key基于LRU算法进行淘汰volatile-lru:对设置了TTL的key基于LRU算法进行淘汰allkeys-lfu:对全体key基于LFU算法进行淘汰volatile-lfu:对设置了TTL的key基于LFI算法进行淘汰比较容易混淆的有两个LRU(LeastRecently Used)最少最近使用。用当前时间减去最后一次访问时间这个值越大则淘汰优先级越高。LFU(Least Frequently Used)最少频率使用。会统计每个key的访问频率值越小淘汰优先级越高。Redis的数据都会被封装为RedisObject结构:LFU的访问次数之所以叫做逻辑访问次数是因为并不是每次key被访问都计数而是通过运算:生成0~1之间的随机数R计算1/(旧次数*lfu_log_factor 1),记录为P,lfu_log_factor默认为10如果RP则计数器1且最大不超过255访问次数会随时间衰减距离上一次访问时间每隔lfu_decay_time分钟(默认1)计数器-1