php -m无redis输出说明扩展未安装或未加载,需先确认php版本、安装匹配的phpredis扩展并重启php-fpm,再检查php.ini中extension配置是否生效。

php -m 里没有 redis 就别急着写代码
先确认扩展压根没装上。执行 php -m | grep redis,没任何输出,说明 PHP 进程根本不知道 Redis 类的存在。这不是 Laravel 配置问题,是底层缺失。很多人卡在这一步还去翻 config/database.php,纯属白忙。
常见错误现象:Laravel 报错 Class 'Redis' not found,或 Driver [redis] not supported;但 redis-cli 能连、SET 能写——这恰恰说明 Redis 服务端正常,只是 PHP 缺扩展。
- 检查当前命令行用的 PHP 是哪个:
which php和php -i | grep "Loaded Configuration File" - 确保你装扩展时用的是同一个 PHP(尤其当系统有多个 PHP 版本,比如 PHP 7.4 和 8.1 并存)
- PECL 安装前必须有对应 PHP 版本的
php-dev(Ubuntu/Debian)或php-devel(CentOS/RHEL)包,否则pecl install redis会直接报错找不到phpize
pecl install redis 不是万能钥匙,得看 PHP 版本匹配
PHP 7.4、8.0、8.1、8.2 对应的 phpredis 扩展版本并不完全兼容。Laravel 6.x 官方最低要求 PHP 7.2,但实际项目多跑在 7.4 或 8.0 上。盲目装最新版 phpredis(比如 6.0+)可能在 PHP 7.4 下编译失败或运行时报 segmentation fault。
推荐做法是查清楚你当前 PHP 版本,再选对应扩展版本:
- PHP 7.4 → 用 phpredis
5.3.7或5.3.8(稳定、兼容性好) - PHP 8.0 → 可用
5.3.7,也支持6.0.2(需确认无 JIT 冲突) - PHP 8.1+ → 建议
6.0.2或更高,5.3.x已停止维护
安装命令示例(以 PHP 7.4 为例):
sudo pecl install redis-5.3.8
装完不会自动写入 php.ini,必须手动加一行:extension=redis.so(Linux/macOS)或 extension=php_redis.dll(Windows,极少用于 Laravel 6 生产环境)。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
Laravel 6.x 的 config/database.php 必须设对 client
扩展装好了,Laravel 还是连不上?大概率是配置里没告诉框架“你该用 C 扩展,而不是 Predis”。Laravel 6 默认允许两种客户端:Predis(纯 PHP 实现)和 phpredis(C 扩展)。即使你只装了 phpredis,如果 config/database.php 里 'client' => 'predis',它照样会去 autoload Predis\Client,然后报错说类不存在。
关键配置项(在 'redis' 数组下):
-
'client' => 'phpredis'—— 注意不是php_redis,也不是redis,大小写和下划线都不能错 - 单机配置下,
'default'和'cache'子数组必须包含'host'、'port'、'database',且不能为 null(哪怕用默认值也要显式写出) - 如果用了
REDIS_PASSWORD环境变量,确保.env里有值,且不是空字符串(password => null和password => ''行为不同)
验证是否生效:在 Laravel Tinker 里执行 app('redis.connection'),返回对象说明连接成功;若报 ConnectionRefused,说明是网络或 Redis 服务端问题,不是扩展问题。
重启 PHP-FPM 比重启 Nginx 重要得多
改完 php.ini 加了 extension=redis.so,很多人只重启 Apache 或 Nginx,结果 phpinfo() 页面里还是看不到 redis 模块。因为 Web 服务器只是反向代理,真正加载 PHP 扩展的是 PHP-FPM 进程(或 mod_php 子进程)。Laravel 6.x 几乎全用 PHP-FPM,所以必须重启它:
- Ubuntu/Debian:
sudo systemctl restart php7.4-fpm(把 7.4 换成你实际的版本) - CentOS/RHEL:
sudo systemctl restart php-fpm(注意不是httpd) - 用 Valet 或 Laravel Sail?Valet 要
valet restart,Sail 要./vendor/bin/sail restart
最容易被忽略的一点:Docker 环境里,你改的是宿主机的 php.ini,但容器内 PHP 进程读的是镜像里的配置文件。必须把 extension=redis.so 写进 Dockerfile 或通过 volume 挂载覆盖,否则改了等于没改。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










