Laravel无法配置Redis内存淘汰策略,因maxmemory和maxmemory-policy是Redis服务端参数,须在redis.conf中设置maxmemory 2gb与maxmemory-policy allkeys-lru,或通过redis-cli CONFIG SET临时生效。

不能直接在 Laravel 里配置 Redis 的内存淘汰策略——这是个常见误解。Laravel 只是用 Redis 作缓存驱动,maxmemory 和 maxmemory-policy 是 Redis 服务端的配置项,必须在 Redis 实例层面设置,Laravel 的 cache 配置文件或 phpredis 客户端本身不提供接口去改这些参数。
为什么 phpredis 客户端无法设置淘汰策略
phpredis 是一个 PHP 扩展,它只负责与 Redis 服务建立连接、发送命令(如 SET、GET)、处理响应。它不参与 Redis 内存管理逻辑,也不暴露 CONFIG SET maxmemory-policy 这类管理命令的封装(即使能发,也受限于 Redis 用户权限)。所以:
- 你在
config/database.php或config/cache.php里加任何字段,比如'maxmemory_policy' => 'allkeys-lru',完全无效 -
phpredis扩展没有setMemoryPolicy()这样的方法 - Laravel 的
RedisManager或RedisStore类根本不读取或传递这类配置
真正要改的地方:Redis 服务端配置
你必须登录到运行 Redis 的服务器(或容器),修改其服务端配置。两种方式都有效,但持久化要求不同:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 编辑
redis.conf文件(推荐):
找到或添加这两行:maxmemory 2gb<br>maxmemory-policy allkeys-lru
保存后执行redis-cli CONFIG REWRITE或重启 Redis 服务 - 运行时临时设置(仅当前进程有效):
redis-cli CONFIG SET maxmemory 2gbredis-cli CONFIG SET maxmemory-policy allkeys-lru - 注意:
maxmemory必须显式设置,否则maxmemory-policy不会生效(Redis 会退回到noeviction)
验证是否生效的最快方式
别依赖 Laravel 日志或缓存命中率——直接查 Redis 实例本身:
立即学习“PHP免费学习笔记(深入)”;
- 运行
redis-cli INFO memory | grep -E "(used_memory_human|maxmemory_human|maxmemory_policy)",确认输出中maxmemory_policy是你设的值,且maxmemory_human不为 0 - 触发一次内存压力:用
redis-cli --bigkeys或批量SET占满内存,观察是否开始淘汰(比如INFO stats | grep evicted_keys计数上升) - 如果
evicted_keys一直为 0,大概率是maxmemory没设,或者策略被覆盖回noeviction
最容易被忽略的一点:Laravel 应用可能连的是多个 Redis 实例(比如缓存用一个,队列用另一个),务必确认你改的是 cache 连接指向的那个 Redis 实例的配置,而不是默认的 default 实例。


















