2026-10-19 15:54:14
Redis中的LRU算法详解如下:
1. LRU算法的核心作用
LRU(Least Recently Used)即最近最少使用算法,用于在内存达到上限时淘汰数据。其核心逻辑是优先淘汰长时间未被访问的key,从而释放内存空间。Redis通过LRU策略避免因内存不足导致的性能下降或系统错误(如触发swap机制)。
2. Redis的LRU实现方式
Redis并未采用严格的LRU算法,而是使用近似LRU以平衡性能与内存开销。具体实现分为两步:
3. LRU相关淘汰策略
Redis提供多种基于LRU的淘汰策略,需通过maxmemory-policy配置:
noeviction:内存不足时拒绝写入(读操作仍允许)。
allkeys-random/volatile-random:随机淘汰,无访问时间考量。
volatile-ttl:按剩余生存时间(TTL)淘汰,TTL越小越优先。
4. 近似LRU的优缺点
减少额外内存开销(无需维护双向链表等数据结构)。
通过采样降低计算复杂度,适合高QPS场景。
准确性低于严格LRU,可能误淘汰高频访问的key(如示例中A被淘汰而B保留)。
采样数(maxmemory_samples)越大,准确性越高但CPU消耗增加。Redis 3.0中该值设为10时,近似效果已接近严格LRU。
5. LRU的局限性及改进
LRU仅考虑访问时间,未兼顾访问频率,可能导致不合理淘汰(如短期高频访问但长期未访问的key被保留)。Redis 4.0引入LFU(Least Frequently Used)算法,通过记录key的访问次数和衰减周期,更精准地淘汰低频访问的key,弥补了LRU的不足。