laravel中cache::get连不上redis主因是phpredis扩展未安装或配置错误:需运行php -m | grep redis确认扩展加载,config/database.php中client必须设为'phpredis',cache_driver=redis且config/cache.php的default必须显式设为'redis',并执行php artisan config:clear。

phpredis 扩展没装好,Cache::get 就永远连不上 Redis
phpredis 是 C 扩展,不是 Composer 包,composer require predis/predis 完全无效。Laravel 7.x 默认倾向用 phpredis(性能更好),但如果你只装了 Predis,CACHE_DRIVER=redis 会静默 fallback 到 file 驱动——连报错都没有。
必须确认扩展已加载:
- 运行
php -m | grep redis,输出里要有redis(不是predis) - 检查
phpinfo()页面中 “Redis Support” 是否为 enabled - 若未出现,需手动安装:Linux/macOS 执行
pecl install redis,然后在php.ini加extension=redis.so;Windows 用php_redis.dll - 改完重启 PHP-FPM 或 Apache/Nginx
config/database.php 里 client 参数必须显式设为 phpredis
Laravel 7.x 的 database.php 中 redis 配置默认不写 client,此时它会按环境变量 REDIS_CLIENT 决定用哪个客户端——但这个变量通常为空,导致 fallback 到 Predis,而你根本没装 Predis。
直接在 config/database.php 的 'redis' 数组开头加这一行:
'client' => 'phpredis',
再确保连接块里字段对齐:
'host' => env('REDIS_HOST', '127.0.0.1')-
'password' => env('REDIS_PASSWORD', null)(注意:设为null表示无密码;不能写空字符串'',否则 phpredis 认为密码是空串并认证失败) 'port' => env('REDIS_PORT', 6379)-
'database' => env('REDIS_DB', 0)(Laravel 7.x 的 cache 驱动默认读这个default连接,不走cache别名)
.env 和 config/cache.php 的 default 必须一致且指向 redis
很多人卡在这步:明明 CACHE_DRIVER=redis,Cache::get() 却还在写文件。因为 Laravel 7.x 的 config/cache.php 中 'default' 键值如果还是 'file',环境变量就完全被忽略。
打开 config/cache.php,找到这一行:
'default' => env('CACHE_DRIVER', 'file'),
改成:
'default' => env('CACHE_DRIVER', 'redis'),
同时确保 .env 有:
CACHE_DRIVER=redis-
REDIS_HOST=127.0.0.1(Docker 环境写容器名如redis) -
REDIS_PASSWORD=null(别漏掉,phpredis 对 null 和 '' 处理完全不同)
改完立刻执行:php artisan config:clear —— 缓存配置是启动时加载的,不清理就不会重读。
Cache::put 不报错但 redis-cli 查不到 key?检查 database 和 serialization
常见现象:Cache::put('test', 'ok', 60) 返回 true,但 redis-cli KEYS "test" 找不到。原因有两个:
-
database 不匹配:phpredis 默认连 DB 0,但你的
REDIS_DB=1没生效,或config/database.php里'database'写死了0。用redis-cli -n 1 KEYS "*"换 DB 查 -
序列化方式不兼容:phpredis 默认用
igbinary序列化(Laravel 7.x 默认关),但如果你启用了它而没装扩展,会静默失败。确认config/database.php中 redis 配置没有'options' => [Redis::OPT_SERIALIZER => Redis::SERIALIZER_IGBINARY]这类代码,除非你真装了 igbinary 扩展
最稳妥的验证方式:用 php artisan tinker 执行 Cache::store('redis')->put('health', 'live', 10),再立刻 redis-cli GET "health" —— 绕过 Laravel 的 store 解析链,直击底层连接。
真正容易被忽略的是 REDIS_PASSWORD=null 的写法和 config/cache.php 里 default 的硬编码值——这两个地方一错,整个缓存链就断在第一环,后面所有调试都白费。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











