PHP Redis扩展未启用是Class 'Redis' not found主因,需pecl install redis、配置php.ini并重启服务;predis纯PHP适合开发,phpredis性能高宜用于生产;连不上需检查socket路径、超时及config:clear。

composer install redis 扩展失败:缺 PHP 模块,不是插件问题
Composer 安装的 phpredis 或 predis/predis 只是 PHP 客户端库,不等于 Redis 服务本身,更不自动启用 PHP 的 redis 扩展。常见报错如 Class 'Redis' not found,本质是 PHP 缺少已编译启用的 redis 扩展模块,和 Composer 装了啥无关。
- 先运行
php -m | grep redis,没输出说明扩展根本没装好 -
pecl install redis是编译安装扩展的正确命令,不是composer require - 装完必须在
php.ini中确认有extension=redis.so(Linux/macOS)或extension=php_redis.dll(Windows) - 改完
php.ini后要重启 Web Server(如 Apache/Nginx)或 PHP-FPM,否则不生效
composer require predis/predis vs phpredis:选哪个?
两者都能连 Redis,但底层机制不同,影响连接稳定性、类型支持和错误表现。
-
predis/predis纯 PHP 实现,无需额外扩展,composer require predis/predis装完就能用,适合开发环境或受限主机 -
phpredis是 C 扩展,性能更高,支持更多 Redis 6+ 特性(如 RESP3、ACL),但依赖系统级安装,部署稍重 - Laravel 默认用
predis/predis,但生产环境建议切到phpredis;切换只需改配置里REDIS_CLIENT为phpredis,并确保扩展已启用 - 注意:Laravel 9+ 默认弃用
predis,推荐直接用phpredis,否则可能遇到Connection refused却无明确提示
Laravel 配置 redis.default.host 连不上:检查 socket 和 timeout
配置看似正确,但连不上常因网络层或协议细节被忽略。
- 默认配置走 TCP:
host=127.0.0.1+port=6379;若 Redis 改用 Unix socket,必须显式设host=/var/run/redis/redis-server.sock并删掉port - 超时值太小会导致偶发失败,尤其在高延迟容器网络中;把
timeout和read_timeout都调到5以上再试 - 密码不为空时,
password字段不能留空字符串,必须为null或真实密码;填空字符串会触发 AUTH 命令失败 - Redis 6+ 默认启用 ACL,
default用户可能无权限;临时验证可改用redis-cli -a yourpass ping直连测试
cache.store.redis.connection 走错配置:别漏掉 config:clear
改完 config/database.php 或 .env 里的 Redis 配置后,Laravel 不会自动重载——缓存的配置还在内存里。
- 每次改完 Redis 连接参数,必须执行
php artisan config:clear,否则新配置完全不生效 - 如果同时用了
php artisan optimize:clear,它会连带清掉 config cache,但单独清 config 更精准 - 本地开发用
php artisan serve时,改配置后需手动重启服务;Docker 环境则要docker-compose restart app,不能只exec进去跑命令 - 验证是否生效:用
php artisan tinker执行config('database.redis.default'),看输出是否和你写的匹配
Redis 连接问题八成出在 PHP 扩展状态、socket 路径拼写、配置缓存未清这三处,而不是 Composer 装了什么包。越早确认 php -i | grep redis 输出和 config:clear 是否执行,越少绕路。










