先确认是否真未安装:php -m | grep redis无输出,可能是CLI与PHP-FPM配置不一致,需检查php-fpm -i | grep "Loaded Configuration File"定位正确php.ini,Ubuntu/Debian推荐sudo apt install php-redis自动配置,Laravel 6.x若用phpredis扩展须在config/database.php中设'client' => 'phpredis'并清缓存php artisan config:clear。

php -m 看不到 redis 模块?先确认是不是真没装
执行 php -m | grep redis 没输出,不代表扩展一定没装——更可能是当前 CLI 使用的 PHP 和 Web 服务器(如 Nginx + PHP-FPM)用的不是同一套配置。Laravel 6.x 运行在 PHP-FPM 下,所以你要查的是 PHP-FPM 对应的 php.ini,而不是 CLI 的那个。
快速定位:运行 php-fpm -i | grep "Loaded Configuration File" 或在 Laravel 中新建一个路由,返回 phpinfo(),看 “Loaded Configuration File” 路径。别只改了 /etc/php/7.4/cli/php.ini,却忘了 /etc/php/7.4/fpm/php.ini。
- Ubuntu/Debian 用户直接装系统包最稳:
sudo apt install php-redis(自动启用、自动写入 fpm/cli 两处 ini) - macOS 用 Homebrew:
brew install php-redis,然后检查php.ini是否已追加extension=redis.so - 别用
pecl install redis后手动加 extension —— 容易漏掉 .so 路径或权限问题,尤其 Alpine 容器里
Laravel 6.x 配置里 client=phpredis 还是 predis?
二者不兼容,选错会导致 Class 'Predis\Client' not found 或 Call to undefined method Illuminate\Redis\Connections\Connection::client() 这类报错。Laravel 6.x 默认用 predis,但如果你装的是 php-redis 扩展,必须显式切换。
打开 config/database.php,找到 redis 数组,把 'client' => env('REDIS_CLIENT', 'predis') 改成:
立即学习“PHP免费学习笔记(深入)”;
'client' => env('REDIS_CLIENT', 'phpredis'),
再确保 .env 里有:
REDIS_CLIENT=phpredis
- 改完必须清配置缓存:
php artisan config:clear(否则 Laravel 仍读旧值) - 如果用了 Horizon 或队列,也要确认
QUEUE_CONNECTION=redis且redis驱动指向的是同一套配置 -
phpredis是 C 扩展,性能略高;predis纯 PHP,调试友好但不支持某些 Redis 6+ 命令(比如ACL相关)
new Redis() 成功但 Laravel 报错“Connection refused”?检查 database 配置层级
PHP 扩展装好了、new Redis() 手动连得上,不代表 Laravel 就能用——它默认从 config/database.php 的 redis.default 读配置,而这个数组结构必须完整,缺字段会静默 fallback 到 127.0.0.1:6379,但密码或 database 错了就直接拒连。
重点核对这四行是否都存在且拼写正确(注意是 database 不是 db):
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DB', 0),
- 如果 Redis 服务启用了密码,
REDIS_PASSWORD不能为空字符串,得是null或真实密码;空字符串会被当成密码传过去,导致认证失败 -
database字段类型必须是整数,不能是字符串"0",否则phpredis会忽略它,连到 db 0 却写进 db 1 - 用
php artisan tinker测试:Redis::connection()->ping()返回"PONG"才算真正通了
Mac M1/M2 上 pecl install redis 失败?换 brew 或跳过编译
Apple Silicon 下 pecl install redis 经常卡在 make,报 error: unknown type name 'uint64_t' 或找不到 hiredis。这不是 Laravel 的锅,是 PECL 构建链和 macOS SDK 版本不匹配。
- 首选方案:
brew install php-redis(Homebrew 已预编译适配 M-series) - 次选:用 Docker 运行 Laravel,容器内用
apk add php7-redis(Alpine)或apt-get install php-redis(Debian),彻底绕开本地编译 - 硬要 PECL?先装依赖:
brew install autoconf automake libtool,再重试,但成功率不稳定
扩展名、配置项、环境变量三者必须咬合,少对一环,Laravel 6.x 就会安静地走回 file 缓存,你却还在日志里找 Redis 连接错误。



















