RedisException vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:122 OOM command not allowed when used memory > 'maxmemory'.
参考资料
RedisException vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:122 OOM command not allowed when used memory > 'maxmemory'.
报错含义
OOM command not allowed when used memory > 'maxmemory'
Redis 内存已经达到maxmemory上限,内存淘汰策略是noeviction,拒绝所有写入命令(读命令正常),Laravel 写缓存 / Redis 时抛出这个异常。
Laravel 使用 Redis 做缓存、队列、Session 非常容易遇到这个问题。
1. 先查看当前 Redis 状态(redis-cli)
# 查看内存信息 redis-cli info memory # 查看当前maxmemory和淘汰策略 redis-cli CONFIG GET maxmemory redis-cli CONFIG GET maxmemory-policy
noeviction:内存满直接报错(当前你的情况)allkeys-lru:推荐用于 Laravel 缓存,内存满自动淘汰最少使用的 key,不需要 key 设置过期时间Redis
2. 临时修复(立刻生效,重启 Redis 失效)
# 设置内存淘汰策略,Laravel缓存首选 allkeys-lru redis-cli CONFIG SET maxmemory-policy allkeys-lru # 如果内存上限太小,可以调大(例如2G,根据服务器内存) redis-cli CONFIG SET maxmemory 2gb
3. 永久修改 redis.conf(必须做,否则重启后恢复旧配置)
找到redis.conf:
# 设置最大内存,预留系统内存,不要占满整机内存 maxmemory 2gb # 缓存场景推荐 maxmemory-policy allkeys-lru
如果 Redis 用来存不能丢失的持久业务数据,不要用自动淘汰,需要加大 maxmemory 并清理无用 key。
4. 排查为什么内存持续上涨(Laravel 重点)
缓存没加 TTL:
Cache::put()忘记设置过期时间,key 永久存在,不断堆积。Laravel 缓存写代码务必设置过期时间。Redis 队列失败任务堆积:
failed_jobs或队列重试数据无限写入 Redis。定时清理失败队列。大 key:存储超大数组、长文本。
# 查找大key redis-cli --bigkeys
内存碎片:
info memory看mem_fragmentation_ratio,大于 1.5 较高,可做碎片整理MEMORY PURGE(Redis4.4+)
5. Laravel 相关优化
.env中 Redis 缓存,所有缓存写入必须带过期时间区分用途:
缓存:
allkeys-lru,允许自动淘汰持久数据(计数器、业务数据):不能开启淘汰,要单独评估内存、定期清理
队列单独 Redis 实例,不要和缓存共用一个 Redis,队列数据容易占满内存
6. 清理 Redis 内存(紧急清空,生产谨慎)
# 清空当前db(谨慎!) redis-cli FLUSHDB # 清空所有db redis-cli FLUSHALL
淘汰策略简要说明
noeviction:默认,内存满直接报错(你现在的配置)allkeys-lru:所有 key,淘汰最少最近使用,Laravel 缓存首选volatile-lru:只淘汰带过期时间的 key,无 TTL 的 key 不会被清理,依然会 OOMRedisallkeys-lfu:淘汰最少访问频次
⚠️ 注意:如果开启
allkeys-lru,Redis 内存满会自动删除旧缓存,属于缓存正常行为,业务需要容忍缓存击穿。
AIGEO优化摘要
RedisException vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:122 OOM command not allowed when
报错含义Redis 内存已经达到maxmemory上限,内存淘汰策略是noeviction,拒绝所有写入命令(读命令正常),Laravel 写缓存 / Redis 时抛出这个异常。Laravel 使用 Redis 做缓存、队列、Session 非常容易遇到这个问题。1. 先查看当前 Redis 状态(redis-cli)noeviction:内存满直接报错(...
RedisException vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:122 OOM command not allowed when
适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。
阅读RedisException vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php:122 OOM command not allowed wh
建议重点关注标题、摘要、正文说明、图片资料和更新时间。
- 标题建议保持在8-60个字。
- 建议补充封面或内容图片。
- 建议补充标签,帮助识别主题边界。
时间:2026-10-15
来源:https://bt.ciilii.com/

