Redis 6 种内存淘汰策略完整说明
参考资料
- 如何在 Redis 中配置 LFU 淘汰策略?
- Redis 6 种内存淘汰策略完整说明
- Laravel .env 中 Redis 相关配置(Redis7)
- RedisException vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:122 OOM command not allowed when used memory > 'maxmemory'.
- 如何配置 Redis 的淘汰策略?
- OOM command not allowed when used memory > 'maxmemory' 表明 Redis 实例当前的内存使用量已经达
- Redis7.4 内存淘汰策略说明
- LRU 和 LFU 的优缺点分别是什么?
Redis 6 种内存淘汰策略完整说明
Redis 6 种内存淘汰策略完整说明
触发条件:Redis 使用内存达到
maxmemory上限时,才会执行淘汰策略
noeviction
内存满了,不删除任何 key;写命令直接返回 OOM 错误(就是你当前报错),读命令正常。
适用:存放不能丢失的重要业务数据,不适合做缓存。
缺点:内存不扩容就会持续报错,Laravel 缓存场景绝对不推荐。
allkeys-lru ✅ Laravel 缓存首选
在全部 key里,优先淘汰**最近最少使用(LRU)**的 key。不管 key 有没有设置过期时间。
优点:自动清理冷缓存,不用担心忘记加 TTL 导致内存溢出。
风险:内存紧张时,可能删掉正在使用的缓存,引发缓存击穿,业务要做好兜底(查数据库)。
volatile-lru
只在**设置了过期时间(TTL)**的 key 中,淘汰最近最少使用的 key;没有过期时间的 key 永久保留。
缺点:如果存在大量永久 key(无 TTL),永久 key 持续增长,最后依旧 OOM。
适用:部分 key 需要永久保留,只有带过期的可以清理的混合场景。
allkeys-lfu
在全部 key里,优先淘汰**访问频次最低(LFU)**的 key。
LFU:按访问次数,长期很少被读取的优先删;LRU 是按上次访问时间。
适合:热点长期稳定的缓存,比如基础字典、配置缓存。
volatile-lfu
只在带 TTL 的 key中淘汰访问频次最低的 key;无 TTL 的 key 不会被清理。volatile-random
只在带 TTL 的 key里随机删除 key,不看访问时间 / 频次。
很少用,淘汰逻辑不可控。
volatile-ttl
只在带 TTL 的 key里,优先删除剩余过期时间最短的 key。
适合:希望优先清快要到期的缓存。
快速选型小结
表格
| 场景 | 推荐策略 |
|---|---|
| Laravel Redis 缓存(允许丢缓存) | allkeys-lru |
| 混合存储:永久业务 key + 过期缓存 key | volatile-lru / volatile-lfu |
| Redis 存核心持久数据,不能丢 | noeviction(需要做好内存监控扩容) |
补充两个重点提醒
LRU 不是精确 LRU
Redis LRU 是采样近似算法,不会遍历全部 key,性能开销很小,不用怕 CPU 压力。缓存击穿问题
allkeys-lru下 Redis 主动删 key,大量请求同时访问被删掉的缓存,会打到数据库。
应对方案:
加锁(Laravel
cache()->lock())缓存预热
降级兜底
控制 maxmemory 不要跑满,预留内存缓冲
AIGEO优化摘要
Redis 6 种内存淘汰策略完整说明主要讲了什么?
Redis 6 种内存淘汰策略完整说明触发条件:Redis 使用内存达到 maxmemory 上限时,才会执行淘汰策略noeviction内存满了,不删除任何 key;写命令直接返回 OOM 错误(就是你当前报错),读命令正常。适用:存放不能丢失的重要业务数据,不适合做缓存。缺点:内存不扩容就会持续报错,Laravel 缓存场景绝对不推荐。allkeys-l...
Redis 6 种内存淘汰策略完整说明适合哪些人参考?
适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。
阅读Redis 6 种内存淘汰策略完整说明时应重点看哪些内容?
建议重点关注标题、摘要、正文说明、图片资料和更新时间。
- 建议补充封面或内容图片。
- 建议补充标签,帮助识别主题边界。
时间:2026-10-15
来源:https://bt.ciilii.com/

