Laravel Redis缓存配置与加速技巧
时间:2026-05-15 21:18:31 325浏览 收藏
Laravel 中启用 Redis 缓存远不止设置 `CACHE_DRIVER=redis` 这么简单——90% 的连接失败、缓存不生效或序列化错乱问题,根源在于 `config/database.php` 与 `config/cache.php` 配置未严格对齐,且遗漏了关键的 `php artisan config:clear` 清理操作;从 Redis 主机地址、密码字段命名、连接名一致性,到序列化方式统一、连接池配置及实时验证技巧,本文直击生产环境中最易踩坑的细节,帮你真正让 Redis 缓存“跑起来、稳得住、快得见”。

直接说结论:CACHE_DRIVER=redis只是开关,真正连不上、缓存不生效、序列化错乱,90%是因为 config/database.php 和 config/cache.php 两处配置没对齐,且漏了 php artisan config:clear。
config/database.php 的 redis 配置必须和 .env 对得上
很多项目改了 REDIS_HOST 和 REDIS_PORT,Cache::get() 还是连 127.0.0.1:6379——不是环境变量没读到,而是 Laravel 启动时从 config/database.php 的 'redis' => ['default' => [...]] 里取连接参数,.env 只是被 env() 函数调用,不会自动映射。
config/database.php中'redis.default.host'必须等于env('REDIS_HOST'),不能写死'localhost'(Docker 内访问宿主要用host.docker.internal)password字段名必须是'password',不是'REDIS_PASSWORD';若用空密码,要设为null,不能留空字符串- 如果用了云 Redis(如阿里云),端口可能是
6380或带代理,redis-cli -h xxx -p xxx ping能通,但 Laravel 报Connection refused,大概率是这里配错了
config/cache.php 的 redis store 要指向正确的 connection 名
Laravel 缓存组件复用的是数据库配置里的 redis 连接定义,不是独立一套。默认情况下 config/cache.php 里 'stores.redis.connection' 是 'default',但如果在 .env 里写了 CACHE_REDIS_CONNECTION=cache,而 config/database.php 里没有 'cache' 这个键,就会静默失败。
- 确认
config/cache.php中'default' => 'redis',且'stores.redis.connection'值和config/database.php中 redis 子数组的 key 一致(比如'default'或'cache') - 别依赖
php artisan cache:clear清 Redis——它只清config/cache.php指定的 connection,不是全库 flush - 验证是否真连上了:跑
php artisan tinker,执行Cache::store('redis')->put('test', 'ok', 60),再Cache::store('redis')->get('test'),返回'ok'才算通
序列化不一致会导致 get() 总是 null
Cache::get() 返回 null 不一定代表没命中,也可能是写入和读取用了不同序列化方式。phpredis 默认用 igbinary(如果启用了),predis 默认用 serialize(),两者不兼容。
- 运行
php --ri redis看 phpredis 是否已加载;没加载就 fallback 到 predis,但行为不一致 - 统一序列化方式:在
config/cache.php的'stores.redis.options'下加'serializer' => 'php' - 缓存 Eloquent 模型时,
remember()默认走 PHP 原生serialize(),但若模型里有闭包、资源句柄或动态属性(如$appends),建议先toArray()再缓存
别让缓存“看起来开了”,其实根本没 hit
开了 Redis 缓存,页面速度却没提升?因为 Laravel 不会自动缓存你写的任何逻辑——view、route、config 的缓存要单独开,业务数据得你自己调 Cache::remember() 或 Cache::store('redis')->get()。
- 用
redis-cli monitor实时看有没有SET命令发出;只有GET没SET,说明缓存压根没写入 - 高频接口别依赖短 TTL,用
Cache::rememberForever()+ 主动失效(Cache::forget()),减少 Redis 过期键扫描压力 - 上线后偶尔超时?检查连接池:Laravel 默认每请求新建连接,高并发下容易耗尽;可在
config/database.php的 redis 配置里加'options' => ['connection_pool' => ['pool_size' => 20]]
最常被忽略的一点:改完配置不跑 php artisan config:clear,Laravel 就永远读缓存过的旧配置;哪怕 .env 改对了,config/database.php 也同步了,不清理缓存文件,一切白搭。
理论要掌握,实操不能落!以上关于《Laravel Redis缓存配置与加速技巧》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
454 收藏
-
437 收藏
-
243 收藏
-
161 收藏
-
259 收藏
-
191 收藏
-
370 收藏
-
325 收藏
-
184 收藏
-
236 收藏
-
187 收藏
-
112 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习