Laravel启用Redis缓存需同时设置CACHE_DRIVER=redis、正确配置redis连接并验证连通性,否则仍走file驱动;须执行config:clear与config:cache,且用Cache::store('redis')显式调用并实测写入。

如果您在 Laravel 项目中启用 Redis 作为缓存驱动但缓存未生效或连接失败,则问题通常出在驱动开关未开启、连接配置未对齐或环境变量未正确加载。以下是多种可独立验证与实施的配置方法:
一、启用缓存驱动并校准环境变量
此方法确保 CACHE_DRIVER 显式生效,避免因 config/cache.php 中 default 回退至 file 而导致 Redis 完全未被调用。Laravel 不会自动将 env('CACHE_DRIVER') 的值注入缓存逻辑,必须显式设置且不可依赖默认值。
1、打开项目根目录下的 .env 文件。
2、确认以下三行均存在且值正确:
CACHE_DRIVER=redis
REDIS_HOST=127.0.0.1(若为 Docker 环境,应替换为容器名如 redis)
REDIS_PORT=6379
3、若 Redis 启用密码认证,补充 REDIS_PASSWORD=your_actual_password;若未设密码,保留为 REDIS_PASSWORD=null。
4、执行 php artisan config:clear 清除旧配置缓存,再运行 php artisan config:cache 使新配置固化生效。
二、显式配置 cache 连接并指定 database 分区
此方法规避默认连接复用风险,通过独立命名的 cache 连接强制绑定特定 Redis 数据库,防止与 session 或 queue 共用 DB 导致 key 冲突或数据覆盖。
1、打开 config/database.php 文件,定位到 'redis' 数组。
2、在 'redis' → 'connections' 下添加专用 cache 连接块:
'cache' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_CACHE_DB', 1),
],
3、打开 config/cache.php,找到 'stores' → 'redis' 配置项,将 'connection' 值改为 'cache':
'connection' => 'cache',
4、在 .env 中新增 REDIS_CACHE_DB=1,确保与 config/database.php 中 database 值一致。
三、强制使用 Redis Store 并绕过 default 驱动链
此方法跳过 config/cache.php 的 default 设置,直接调用 Redis store 实例,适用于多缓存策略共存或 default 被意外覆盖的场景,确保操作绝对走 Redis。
1、在控制器或测试路由中,不使用 Cache::get(),改用显式 store:
Cache::store('redis')->put('health_check', 'alive', 30);
2、读取时同样指定 store:
$value = Cache::store('redis')->get('health_check');
3、验证是否成功写入:进入终端执行 redis-cli -n 1 KEYS "health_check"(-n 1 对应 REDIS_CACHE_DB=1),应返回匹配 key。
四、验证 Redis 连通性与序列化行为
此方法排除底层扩展缺失或序列化配置错误导致的静默失败,尤其适用于模型缓存后属性丢失、remember() 返回 null 等现象。
1、确认 PHP 已加载 Redis 扩展:运行 php -m | grep redis,输出 phpredis 或无结果但有 predis 表明客户端就绪。
2、进入 tinker 环境执行连通性测试:
php artisan tinker --execute="\Redis::connection()->ping();"
3、检查 config/cache.php 中 redis store 的 'serialize' 选项是否为 true:
'serialize' => true,
4、若缓存 Eloquent 模型,改用 toArray() 预处理:
Cache::store('redis')->put('user_123', $user->toArray(), 3600);
五、添加前缀隔离与键名规范控制
此方法防止 Laravel 缓存 key 与其他应用或 Laravel 自身 session/queue key 冲突,同时便于通过 redis-cli 精确识别和清理本项目缓存。
1、打开 config/cache.php,定位到 'stores' → 'redis' → 'prefix' 项。
2、将 prefix 设为项目专属字符串,例如:
'prefix' => 'myapp_cache:',
3、在 .env 中同步定义该前缀(若配置支持 env 覆盖):
CACHE_REDIS_PREFIX=myapp_cache:
4、验证前缀生效:执行 redis-cli -n 1 KEYS "myapp_cache:*",应列出带前缀的缓存键。



















