cache_driver=redis生效需闭环验证三步:装对php redis扩展(phpredis或predis)、配准database.php与cache.php的redis连接名及环境变量、清缓存后用cache::store('redis')显式验证读写。

直接设 CACHE_DRIVER=redis 不等于缓存就走 Redis——多数项目卡在扩展没装、配置没对齐、命令没清缓存这三步上。真正生效必须闭环验证:装得对、配得准、调得通。
装好 PHP Redis 扩展
没有底层通信能力,Laravel 根本发不出 Redis 请求。
- 用
php -m | grep redis查看是否已加载redis(phpredis)或无输出但composer show predis/predis有版本(Predis) - 若未安装 phpredis:运行
pecl install redis,并在php.ini加extension=redis.so(Linux/macOS)或extension=php_redis.dll(Windows) - 若选 Predis:执行
composer require predis/predis,同时确保config/database.php中'client' => 'predis' - 改完重启 PHP-FPM 和 Web 服务(如 Nginx/Apache)
对齐 database.php 和 cache.php 配置
Laravel 缓存复用的是数据库配置里的 Redis 连接定义,不是独立一套。两处 key 必须一致,否则静默 fallback 到 file 驱动。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 在
config/database.php的'redis' => ['connections' => [...]]下,确认存在你打算用的连接名,例如:'cache' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_CACHE_DB', 1), ] - 在
config/cache.php中,确保:'default' => env('CACHE_DRIVER', 'redis')
且'stores' => ['redis' => [ 'driver' => 'redis', 'connection' => 'cache', // 必须和 database.php 里定义的 key 一致 ]] - 环境变量
.env要同步写全:CACHE_DRIVER=redis<br>REDIS_HOST=127.0.0.1<br>REDIS_PORT=6379<br>REDIS_PASSWORD=null<br>REDIS_CACHE_DB=1
清缓存并显式验证连通性
不执行 config:clear,新环境变量不会生效;不显式调用 store,可能还在走默认 file 驱动。
- 运行
php artisan config:clear && php artisan config:cache - 进入 Tinker 验证:
php artisan tinkerCache::store('redis')->put('health_test', 'ok', 30);Cache::store('redis')->get('health_test');
返回"ok"表示 Redis 已通 - 别依赖
Cache::get()—— 它走的是config/cache.php的defaultstore,而你刚配的是redisstore。显式写Cache::store('redis')->get(...)更可靠
日常使用与避坑提示
缓存写入简单,但几个细节错一点就白配。
- 存数据用
Cache::store('redis')->put('key', $value, 3600),单位是秒;remember()适合查库+缓存组合场景 - 加前缀防 key 冲突:在
config/cache.php的stores.redis下加'prefix' => 'app_v1:' - 不要用
php artisan cache:clear清 Redis 全库——它只清当前 store 指向的 database,不是FLUSHALL;要清指定库,用redis-cli -n 1 flushdb - 序列化问题:Eloquent 模型用
remember()时若属性丢失,检查是否启用了serialize(Laravel 9+ 默认开启),或手动json_encode()预处理










