Laravel部署Redis需同时配置CACHE_DRIVER=redis和SESSION_DRIVER=redis,否则缓存和会话仍走file;配置后须用Redis::ping()和Cache::store('redis')->put()实测验证,且config:cache前必须config:clear。

Laravel 部署时 Redis 不是“配了就能用”,关键看 cache 和 session 两个驱动是否真正走 Redis,而不是默认的 file 或 array。
确认 Laravel 正在用 Redis 做缓存驱动
很多人改了 .env 里的 REDIS_HOST 就以为搞定了,其实 CACHE_DRIVER 默认是 file,Redis 根本不参与缓存逻辑。
-
CACHE_DRIVER=redis必须显式设置,不能依赖默认值 - 检查
config/cache.php中'default' => env('CACHE_DRIVER', 'file')—— 环境变量没生效时会悄悄回退到file - 运行
php artisan tinker后执行Cache::store('redis')->put('test', 'ok', 60),再用redis-cli keys "*test*"验证是否真写进去了
Session 存 Redis 要单独配,和缓存无关
CACHE_DRIVER=redis 不会影响 session,Laravel 的 session 是独立配置项,漏掉这步,登录态仍存在本地文件里,部署多实例时直接失效。
-
SESSION_DRIVER=redis必须设置,且不能是database或file -
SESSION_CONNECTION可选,但如果你用了 Redis Sentinel 或多个连接池,得明确指定(比如cache连主库、session连从库) - 确保
config/session.php中'connection' => env('SESSION_CONNECTION', null)允许环境变量覆盖
Redis 连接失败时 Laravel 默认静默降级
线上 Redis 挂了或网络不通,Laravel 不报错也不抛异常,而是自动切到 array 驱动——你完全感知不到,直到缓存击穿、session 丢失、队列卡住。
- 在
config/database.php的redis配置里加'options' => ['prefix' => 'laravel_']只是命名规范,不解决容错 - 真正要干预降级行为,得重写
Illuminate\Cache\RedisStore或监听ConnectionFailed事件,但更务实的做法是:部署时用php artisan tinker -n执行Redis::ping()做健康检查 -
php artisan config:clear后必须php artisan config:cache,否则.env修改不生效,而config:cache会把redis配置固化,连错地址也照连不误
Redis 在 Laravel 里不是开关按钮,它是两套并行路径(cache + session),每条路径都可能被环境变量、配置缓存、连接参数悄悄绕过。上线前别只改 .env,一定要进容器或服务器跑一遍 Redis::ping() 和 Cache::get('x') 实测。











