缓存淘汰策略
面试官问:"Redis 内存满了怎么办?"
小张说:"淘汰数据。"
面试官追问:"有哪些淘汰策略?LRU 和 LFU 有什么区别?"
小张说:"LRU 是...最近最少使用?"
面试官继续追问:"那 LFU 呢?"
小陈答不上来。
Redis 内存管理是面试中的高频问题。这道题能说清楚 8 种淘汰策略和 LRU vs LFU 区别的候选人,对 Redis 的内存管理机制有深入理解。
一、Redis 内存限制 🔴
1.1 maxmemory 配置
1.2 内存满了的行为
二、8 种淘汰策略 🔴
2.1 策略总览
2.2 LRU vs LFU vs Random
2.3 ❌ 错误示范
候选人原话:"LRU 就是淘汰最近使用过的 key。"
问题诊断:LRU 是淘汰最近最少使用的 key(最久未访问的),不是"最近使用过的"。
候选人原话 2:"allkeys-lru 和 volatile-lru 一样,都是 LRU。"
问题诊断:两者都用 LRU 算法,但作用范围不同。allkeys 是所有 key,volatile 是只有过期时间的 key。
【面试官心理】 这道题我会从 LRU 和 LFU 的区别追问。能说清楚"LRU 只看时间,LFU 考虑频率"的候选人,说明他理解了两种算法的本质区别。
三、LRU 算法实现 🟡
3.1 Redis 的 LRU 实现
3.2 LRU vs 近似 LRU
四、LFU 算法实现 🟡
4.1 LFU 的计数器衰减
4.2 LRU vs LFU 场景对比
五、生产选型 🟡
5.1 策略选择
5.2 监控内存
【面试官心理】 淘汰策略是 Redis 内存管理的核心。能说清楚 LRU 和 LFU 的适用场景、以及近似 LRU 实现原理的候选人,说明他对 Redis 的内部机制有深入理解。