必须先安装并启用phpredis扩展,否则即使环境变量配置正确,laravel也会静默回退到file驱动;需通过php -m | grep redis和php --ri redis验证扩展已加载且版本≥4.3.0。

phpredis 扩展必须先装好,否则环境变量无效
环境变量只是告诉 Laravel 用什么客户端、连哪台 Redis,但 phpredis 本身得是 PHP 已加载的扩展。Laravel 6.x 默认用 predis,要切到 phpredis 必须手动安装并启用扩展,否则哪怕所有 env 都写对了,Cache::get() 也会静默 fallback 到 file 驱动。
验证是否就绪:php -m | grep redis 要有输出;php --ri redis 应显示版本信息(如 Redis Version => 5.3.7)。没结果就别往下配环境变量了。
- Linux/macOS:运行
pecl install redis,然后在php.ini加extension=redis.so - Windows:下载对应 PHP 版本的
php_redis.dll,放进ext/目录,再在php.ini加extension=php_redis.dll - Homestead/Valet/Docker:确认镜像已预装,或在
Dockerfile中加pecl install redis & docker-php-ext-enable redis
REDIS_CLIENT=phpredis 必须写进 .env,且不能拼错
Laravel 6.x 的 config/database.php 里读取 REDIS_CLIENT 是靠 env('REDIS_CLIENT', 'predis'),这个值决定底层用哪个客户端类。不设或设错(比如写成 PHPREDIS 或 redis),就会走默认的 predis,导致连接行为不一致——比如 phpredis 不支持某些 predis 的选项,或序列化方式不同引发 get() 返回 null。
- 在
.env中明确写:REDIS_CLIENT=phpredis - 不要写
REDIS_CLIENT=PhpRedis、redis或留空 - 改完立刻执行
php artisan config:clear,否则缓存里的旧配置还在用predis
database.php 的 redis 配置必须匹配 phpredis 的参数名
phpredis 对参数更严格:password 字段必须是 null 表示无密码,不能是空字符串 '';database 必须是整数,不能是字符串 "0";timeout 和 read_write_timeout 在 phpredis 下才真正生效,predis 会忽略它们。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
检查 config/database.php 中 'redis' => ['default' => [...]] 块:
-
'password' => env('REDIS_PASSWORD', null)—— 注意是null,不是''或'null' -
'database' => (int) env('REDIS_DB', 0)—— 强制转整型,避免字符串导致连接失败 - 如果用了云 Redis(如腾讯云、阿里云),端口常是
6380或带 SSL,phpredis需额外配'scheme' => 'tls',且必须用redis-cli -u redis://:pwd@host:6380 ping先验证通不通
CACHE_DRIVER=redis 之后还要确认 cache.php 指向的是 phpredis 连接
CACHE_DRIVER=redis 只是打开开关,真正干活的是 config/cache.php 里 stores.redis.connection 指向的连接名,而那个连接名(比如 default)必须在 config/database.php 的 redis.connections 里存在,且其 client 设置为 phpredis。
常见断点:
-
config/cache.php里'connection' => 'cache',但config/database.php里只有'default'没有'cache'键 → 报错Connection [cache] not configured -
config/database.php的'redis' => ['client' => 'phpredis']写在顶层,但实际应写在'connections.default'下面 —— Laravel 6.x 不认顶层client,只认每个 connection 自己的client - 用了 Docker,
REDIS_HOST=redis在容器内能解析,但phpredis默认不支持 DNS 缓存,频繁重连时可能超时,建议加'retry_interval' => 100
最易被忽略的一点:Laravel 6.x 的 phpredis 支持要求 PHP >= 7.2.5 且 redis 扩展 >= 4.3.0;低于这个版本,即使 php -m 显示 redis,Cache::put() 也可能因序列化协议不兼容而写入成功但读不出 —— 此时 redis-cli get "laravel_database_key" 看到的是乱码或二进制数据,不是 JSON。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










