Laravel Redis缓存需对齐config/database.php的redis配置,确保client、password、connection等与环境一致,并设prefix防key冲突,remember()要确认serialize选项开启。

Laravel 默认支持 Redis 作为缓存驱动,但直接改 .env 里的 CACHE_DRIVER=redis 并不足够——很多项目卡在连接失败、序列化异常或缓存未命中上,本质是配置没对齐实际环境。
Redis 连接配置必须匹配 config/database.php 中的 redis 键
Laravel 的缓存组件复用的是数据库配置里的 redis 连接定义,不是 .env 单独控制。常见错误是只改了 REDIS_HOST 和 REDIS_PORT,却忘了检查 config/database.php 中 'redis' 数组是否引用了正确的 default 配置项。
-
config/database.php中的'redis' => ['client' => 'phpredis']必须与已安装扩展一致(phpredis或predis) - 若使用
phpredis,确保 PHP 已加载该扩展(php -m | grep redis),否则会报Class 'Redis' not found - 密码字段名是
password,不是REDIS_PASSWORD—— Laravel 会自动从.env映射,但若手动写死配置,必须用'password' => env('REDIS_PASSWORD')
cache:clear 不清 Redis 缓存?因为默认用的是 default 连接,不是 cache
Laravel 缓存命令如 php artisan cache:clear 实际操作的是 cache 连接,而这个连接默认指向 config/cache.php 中 'stores.redis.connection' 指定的 Redis 配置名(默认是 'default')。如果修改过 config/cache.php 中的 connection 值,或者在 .env 里设了 CACHE_REDIS_CONNECTION=other,但 config/database.php 里没有对应键,就会静默失败。
- 运行
php artisan tinker后执行Cache::store('redis')->get('test')可验证当前缓存 store 是否连通 - 不要依赖
phpredis的flushAll()全局清空——它会影响其他应用共享的 Redis 实例 - 推荐用带前缀的缓存:在
config/cache.php的redisstore 下加'prefix' => 'laravel_cache:',避免 key 冲突
缓存模型数据时,remember() 默认序列化为 JSON,遇到对象属性丢失?
Laravel 的 Cache::remember() 底层调用的是 serialize()(PHP 原生),但 Redis store 默认启用 serialize 选项后,Eloquent 模型中某些动态属性(如 $appends、访问器返回值)可能不会被持久化;更常见的是用 phpredis 且未开启 serialize 选项,导致存入的是字符串而非完整对象。
- 确认
config/cache.php中redisstore 的'serialize' => true(Laravel 9+ 默认开启) - 避免直接缓存整个模型集合:用
toArray()或json_encode()预处理,防止序列化闭包或资源句柄 - 对高频小数据,优先用
Cache::put('key', $value, 3600)而非remember(),减少运行时判断开销
真正卡住性能的往往不是 Redis 本身,而是缓存键设计不合理(比如含用户 ID 却没做分片)、缓存穿透没兜底、或本地开发开着 Xdebug 导致 serialize/unserialize 极慢——这些比换驱动影响更大。










