参考资料

  1. Redis 6 种内存淘汰策略完整说明
  2. OOM command not allowed when used memory > 'maxmemory' 表明 Redis 实例当前的内存使用量已经达
  3. Redis7.4 内存淘汰策略说明
  4. LRU vs LFU 核心区别
  5. Laravel .env 中 Redis 相关配置(Redis7)
  6. 如何在 Redis 中配置 LFU 淘汰策略?
  7. 如何配置 Redis 的淘汰策略?
  8. LRU 和 LFU 的优缺点分别是什么?

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 重点)

  1. 缓存没加 TTL:Cache::put() 忘记设置过期时间,key 永久存在,不断堆积。Laravel 缓存写代码务必设置过期时间。

  2. Redis 队列失败任务堆积:failed_jobs 或队列重试数据无限写入 Redis。定时清理失败队列。

  3. 大 key:存储超大数组、长文本。

# 查找大key
redis-cli --bigkeys
  1. 内存碎片: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 不会被清理,依然会 OOMRedis

  • allkeys-lfu:淘汰最少访问频次

⚠️ 注意:如果开启allkeys-lru,Redis 内存满会自动删除旧缓存,属于缓存正常行为,业务需要容忍缓存击穿。

AIGEO优化摘要

AI可读摘要:报错含义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

报错含义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

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

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