Redis扩展需通过pecl或系统包管理器安装,非composer;确认已加载需执行php -m | grep redis、php --ri redis或查看phpinfo()中“Redis Support => enabled”;仅装predis/predis无法使用Redis类。

Redis 扩展不是靠 composer 安装的,而是 PHP 的原生扩展,必须用 pecl 或系统包管理器编译/安装;Composer 只能装 Redis 的 PHP 封装类库(比如 predis/predis 或 phpredis 的 wrapper)。
怎么确认 Redis 扩展已加载(而不是只装了 Composer 包)
很多人执行 composer require predis/predis 后以为“Redis 能用了”,结果一调 new Redis() 就报 Class 'Redis' not found —— 这说明 PHP 进程根本没加载 redis.so 扩展。
- 运行
php -m | grep redis,有输出才代表扩展已启用 - 运行
php --ri redis,能显示版本和配置才说明加载成功 -
phpinfo()页面里搜 “redis” 段落,看有没有 “Redis Support => enabled” - 如果只有
Predis\Client类可用,但没有Redis类,那只是用了纯 PHP 客户端,性能、命令支持、连接池能力都弱于原生扩展
用 pecl 安装 phpredis(推荐生产环境)
原生 phpredis 扩展性能好、支持所有 Redis 命令、能用连接池和序列化选项,pecl 是最直接的方式。
- 先确保已安装
php-dev(Ubuntu/Debian)或php-devel(CentOS/RHEL)—— 缺这个会编译失败 - 运行
pecl install redis,完成后提示你往php.ini里加extension=redis.so - 注意:不同 PHP 版本要对应不同
phpredis版本,PHP 8.2+ 推荐用redis-5.3.7+,旧版可能不兼容 - 重启 Web 服务(
systemctl restart apache2或systemctl restart php-fpm),否则扩展不生效
用 Composer 装 Predis(适合开发或无法装扩展的环境)
当服务器权限受限(如共享主机)、或想快速验证逻辑时,predis/predis 是纯 PHP 实现,composer require predis/predis 装完就能用,但要注意它不等于 redis 扩展。
- 类名是
Predis\Client,不是Redis,不能直接替换原生扩展代码 - 不支持
SCAN游标自动迭代、管道批量执行的底层优化、以及某些高级参数(如read_timeout在连接池里行为不一致) - 连接字符串写法不同:
tcp://127.0.0.1:6379?database=1可以,但redis://协议需 Predis ≥ 1.1 - 若 Laravel 项目用
cache.store.redis.connection配置,Laravel 默认优先尝试Redis类,要显式指定'client' => 'predis'才会走 Predis
缓存类库配置常见错配点
装完扩展或类库,配置不对照样连不上,尤其在 Laravel、Symfony 等框架里。
- Laravel 的
config/database.php里redis.default的host写成localhost可能因 IPv6 解析变慢,建议改127.0.0.1 - 密码带特殊字符(如
@、/)必须 URL 编码,否则 DSN 解析失败,错误信息是Connection refused或空响应 - Redis 6+ 默认启用 ACL,
default用户可能没权限执行SET,得在redis.conf加requirepass或用ACL SETUSER显式授权 - 用 Docker 时,PHP 容器连 Redis 容器别写
127.0.0.1,得用服务名(如redis),且确认在同一 network 下
真正卡住人的往往不是“怎么装”,而是“装了但没加载”“连上了但没权限”“用了 Predis 却按 phpredis 文档写代码”。扩展和类库的边界、错误提示的真实含义、还有配置里那个没 urlencode 的密码——这些地方不动手试一次,光看教程真看不出问题在哪。










