必须使用 phpredis 扩展,确认其已加载并被 Laravel 6.x 正确识别;在 config/database.php 中显式设置 'client' => 'phpredis' 和专用 cache 连接;在 config/cache.php 中将 redis store 的 connection 改为 'cache';执行 config:clear 和 config:cache;测试时用 Cache::store('redis') 显式调用并验证 key 写入指定 DB。

必须用 phpredis 扩展(而非 predis),否则 Cache::store('redis') 在 Laravel 6.x 中可能 silently fallback 到 file 驱动,尤其在高并发或序列化复杂对象时。
确认 phpredis 已正确加载并被 Laravel 识别
很多问题其实卡在这一步:扩展装了,但 Laravel 没读到。Laravel 6.x 默认只认 phpredis 名字的 client,且对 extension=redis 加载路径和版本敏感。
- 执行
php -m | grep redis,输出必须含redis(不是predis);若无,说明扩展未启用 - 检查
php --ini输出的配置文件路径,在对应php.ini里确认有extension=redis(Linux/macOS)或extension=php_redis.dll(Windows) - 重启 PHP-FPM 或 Apache/Nginx,
phpinfo()页面中必须出现 “Redis Support => enabled” 和 “Redis Version” 字段 - 在
.env中显式声明REDIS_CLIENT=phpredis,避免 Laravel 自动 fallback 到 predis
修改 config/database.php 的 redis client 和 connection 配置
Laravel 6.x 的 config/database.php 中 redis 数组必须明确指定 client 值,并为缓存单独配一个 connection,否则 Cache 门面会找不到目标连接。
- 确保
'client' => env('REDIS_CLIENT', 'phpredis')—— 这行不能注释、不能写错大小写 - 在
'connections'下定义专用缓存连接,例如:'cache' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD'), 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_CACHE_DB', 1) ] - 不要复用
default连接做缓存,否则 session/queue/cache 三者共用 DB 0 容易 key 冲突、误删
强制 cache.php 使用该 connection 并清空配置缓存
即使 .env 设了 CACHE_DRIVER=redis,Laravel 6.x 仍会优先查 config/cache.php 的 stores.redis.connection 字段。不手动指定,它默认是 'default',而你刚配的是 'cache'。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
立即学习“PHP免费学习笔记(深入)”;
- 打开
config/cache.php,找到'redis'store,把'connection' => 'default'改成'connection' => 'cache' - 运行
php artisan config:clear删除 bootstrap/cache/config.php - 再运行
php artisan config:cache生成新缓存 —— 这步漏掉,.env修改完全无效 - 验证:在 tinker 中执行
config('cache.stores.redis.connection'),返回值必须是'cache'
测试时用 Cache::store() 显式调用,别依赖默认驱动
Laravel 6.x 的 Cache::get() 是走 config('cache.default') → config('cache.stores.' . $default) 链路,一旦中间某层 fallback 就静默失败。直接指定 store 最可靠。
- 写个测试路由:
Cache::store('redis')->put('laravel6-phpredis-test', now()->timestamp, 60); - 立刻查:
Cache::store('redis')->get('laravel6-phpredis-test'),应返回时间戳 - 同时用
redis-cli -n 1 get "laravel6-phpredis-test"确认 key 真实写入 DB 1(注意-n 1对应REDIS_CACHE_DB=1) - 如果
Cache::get()成功但redis-cli查不到,大概率是database配错了;反之则是 Laravel 没连上 Redis
最关键的细节是:Laravel 6.x 不会自动把 REDIS_CLIENT 注入到所有 Redis 相关逻辑中,client 值必须出现在 config/database.php 的数组字面量里,环境变量只是兜底。任何一处拼写错误(比如 phpRedis 或 PhpRedis)都会导致 client 初始化失败,然后整个 Redis 缓存链退化为 file。


















