LRU vs LFU 核心区别
参考资料
LRU vs LFU 核心区别
LRU vs LFU 核心区别
一句话总结:
LRU:看「多久没用过」;LFU:看「被访问多少次」
1. LRU(Least Recently Used)最近最少使用
淘汰:最久没有被访问过的 key
判断维度:时间(最后一次访问时间)
逻辑:只要最近有人访问,就认为是热 key;很久没人碰,就标记为冷 key,优先删掉。
✅ 优点
实现简单,Redis 原生采样版性能好
适合热点会变化的业务:比如活动临时缓存、首页推荐、临时数据,热点会轮换。
Laravel 缓存场景最常用。
❌ 缺点
短期突发流量会造成误判:
举例子:一次性查询一次冷门 key,这个 key 会更新访问时间,变成 “近期使用”,即使只访问 1 次,也不容易被淘汰;但长期高频访问的老 key,反而可能被挤掉。
Redis LRU 不是完整精确 LRU,是采样近似 LRU,减少 CPU 开销。
2. LFU(Least Frequently Used)最少使用频次
淘汰:访问次数最少的 key
判断维度:访问频率(一段时间内被读取次数)
逻辑:统计 key 被访问频次,经常访问 = 热 key;很少访问 = 冷 key 优先删。
✅ 优点
识别真正长期稳定热点,不会被一次性偶然访问 “污染”。
例子:一个 key 只访问 1 次,哪怕刚刚访问,LFU 也知道它不是热数据,内存紧张时优先清理。
❌ 缺点
热点如果切换很慢才好用;热点快速变化场景不适合
比如:临时活动缓存,活动结束后,旧活动 key 的访问计数还很高,迟迟不被淘汰,占用内存。
Redis LFU 自带衰减机制:计数器会随时间慢慢降低,缓解旧热点残留问题,但依然不如 LRU 适合短期临时缓存。
直观例子
假设有 3 个 key:
KeyA:1 小时前访问 1 次(冷门,刚碰一下)
KeyB:10 分钟前访问,每天被访问上千次(长期热点)
KeyC:2 小时前访问,之后再也没访问(旧冷数据)
LRU 淘汰顺序:先删 C(最久没访问),A 因为刚刚访问过,保留
LFU 淘汰顺序:先删 A(访问次数最少),B 访问频次高保留
选型建议
表格
| 策略 | 适用场景 | 不适合场景 |
|---|---|---|
| allkeys-lru | Laravel 普通缓存、临时数据、热点经常变动、活动缓存 | 长期稳定不变的基础字典 |
| allkeys-lfu | 基础配置、字典、固定热点,长期不变的数据 | 短期活动、一次性查询产生大量临时 key |
针对你当前 Laravel 场景重点提醒
你现在遇到 OOM command not allowed,绝大多数情况是:
大量 key 忘记设置 TTL,不断堆积。
用
allkeys-lru:哪怕 key 没有过期时间,内存满时也会自动清理冷 key,兜底能力更强,这也是 Laravel 缓存推荐它的原因。allkeys-lfu:同样可以清理无 TTL 的 key,但热点如果经常变化,旧计数容易残留,兜底效果不如 LRU 直观。
补充:volatile-lru /volatile-lfu
前缀 volatile-:只对设置了过期时间 (TTL) 的 key 生效,永久 key 不会被淘汰。
如果存在大量不带 TTL 的 key,volatile 系列策略依然会 OOM。
如果你想,我可以给你 Redis LFU 的调参(lfu-log-factor、lfu-decay-time)说明。
AIGEO优化摘要
LRU vs LFU 核心区别主要讲了什么?
LRU vs LFU 核心区别一句话总结:LRU:看「多久没用过」;LFU:看「被访问多少次」1. LRU(Least Recently Used)最近最少使用淘汰:最久没有被访问过的 key判断维度:时间(最后一次访问时间)逻辑:只要最近有人访问,就认为是热 key;很久没人碰,就标记为冷 key,优先删掉。✅ 优点实现简单,Redis 原生采样版性能好适...
LRU vs LFU 核心区别适合哪些人参考?
适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。
阅读LRU vs LFU 核心区别时应重点看哪些内容?
建议重点关注标题、摘要、正文说明、图片资料和更新时间。
- 建议补充封面或内容图片。
- 建议补充标签,帮助识别主题边界。
时间:2026-10-15
来源:https://bt.ciilii.com/

