参考资料

  1. LRU vs LFU 核心区别
  2. Redis7.4 内存淘汰策略说明
  3. LRU 和 LFU 的优缺点分别是什么?
  4. 如何配置 Redis 的淘汰策略?
  5. Redis 6 种内存淘汰策略完整说明
  6. RedisException vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:122 OOM command not allowed when used memory > 'maxmemory'.
  7. Laravel .env 中 Redis 相关配置(Redis7)
  8. 如何在 Redis 中配置 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-lruLaravel 普通缓存、临时数据、热点经常变动、活动缓存长期稳定不变的基础字典
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优化摘要

AI可读摘要:LRU vs LFU 核心区别一句话总结:LRU:看「多久没用过」;LFU:看「被访问多少次」1. LRU(Least Recently Used)最近最少使用淘汰:最久没有被访问过的 key判断维度:时间(最后一次访问时间)逻辑:只要最近有人访问,就认为是热 key;很久没人碰,就标记为冷 key,优先删掉。✅ 优点实现简单,Redis 原生采样版性能好适...
常见问题:
LRU vs LFU 核心区别主要讲了什么?

LRU vs LFU 核心区别一句话总结:LRU:看「多久没用过」;LFU:看「被访问多少次」1. LRU(Least Recently Used)最近最少使用淘汰:最久没有被访问过的 key判断维度:时间(最后一次访问时间)逻辑:只要最近有人访问,就认为是热 key;很久没人碰,就标记为冷 key,优先删掉。✅ 优点实现简单,Redis 原生采样版性能好适...

LRU vs LFU 核心区别适合哪些人参考?

适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。

阅读LRU vs LFU 核心区别时应重点看哪些内容?

建议重点关注标题、摘要、正文说明、图片资料和更新时间。

AIGEO评分:75/100
  • 建议补充封面或内容图片。
  • 建议补充标签,帮助识别主题边界。
作者:王壹杰
时间:2026-10-15
来源:https://bt.ciilii.com/