确认PHP架构匹配是第一步,必须通过php -v、php -i | findstr "Thread Safe"和"Architecture"明确版本、TS/NTS及x86/x64信息,再下载对应pecl包,正确配置extension=redis与extension_dir,重启Apache,并单独安装启动Redis服务。

确认 PHP 架构匹配是第一步,不是可选项
PHP 启动失败、PHP Startup: Unable to load dynamic library 'redis' 或 Apache 直接崩溃,90% 是因为 php_redis.dll 和 XAMPP 自带 PHP 的架构不一致。XAMPP 8.0+ 默认用 TS(Thread Safe)、x86 或 x64 —— 这跟你的 Windows 系统位数无关,只看 PHP 自身。
执行以下命令确认真实配置:
php -v → 看版本号(如 8.0.30)php -i | findstr "Thread Safe" → 输出 enabled 就是 TS,disabled 是 NTSphp -i | findstr "Architecture" → 显示 x86 或 x64
- 选错 DLL 会导致静默失效:扩展看似加载了,但
php -m里没有redis,phpinfo()也搜不到 - 别从 pecl.php.net 主页直接下载 ZIP —— 那里默认给的是 NTS 版;必须去 windows.php.net/pecl/releases/redis/ 找带
ts和对应架构的包(例如redis-5.3.7-8.0-ts-vs16-x64.zip) - 解压后只要
php_redis.dll,不用.pdb文件
php.ini 中 extension=redis 不能加路径、不能带后缀
在 C:\xampp\php\php.ini 里添加扩展时,写成 extension=php_redis.dll 或 extension="C:\xampp\php\ext\php_redis.dll" 都会失败,前者报 Module 'redis' already loaded,后者触发 Invalid configuration directive。
正确写法只有一行,放在 ;extension=mysqli 附近即可:
立即学习“PHP免费学习笔记(深入)”;
extension=redis
- PHP 8+ 已支持省略前缀和后缀,硬写全名反而被识别为两个不同扩展
- 确保
extension_dir指向正确:默认是extension_dir = "C:\xampp\php\ext",路径末尾不能有斜杠 - 改完必须重启 Apache,不是刷新页面 —— 控制面板点 Stop 再 Start,或任务管理器杀掉所有
httpd.exe
Redis 服务要单独装,XAMPP 不带
php_redis.dll 只是让 PHP 能“说话”,但没“人听”—— 它不包含 Redis 服务器。不启动 redis-server,$redis->connect() 必然超时或报 Connection refused。
开发环境推荐用 Microsoft Archive 的 Windows port(仅限 Win):
- 下载
redis-x64-*.zip(选最新版,如 7.2.x),解压到C:\redis - 管理员身份运行 CMD,进到该目录:
redis-server --service-install redis.windows.conf --loglevel verbose - 再执行:
redis-server --service-start - 验证:
redis-cli ping应返回PONG;若提示命令未找到,把C:\redis加进系统PATH
注意端口冲突:netstat -ano | findstr :6379 查是否被占用,冲突就改 redis.windows.conf 里的 port 6379。
验证时别只信 phpinfo(),CLI 和 Web 可能用不同配置
浏览器打开 phpinfo() 页面看到 redis 模块,不代表 CLI 模式能用;反之亦然。很多调试卡在这一步。
分三路验证:
php -m | findstr redis → CLI 是否加载成功php --ini → 确认 CLI 读的是哪个 php.ini(常和 Apache 用的不同)php -r "$r = new Redis(); var_dump($r->connect('127.0.0.1', 6379));" → 直接测连通性
- 如果 CLI 成功但 Web 失败,大概率是 Apache 读的
php.ini没改,或控制面板里 Apache 用的是另一套配置 - 如果连接失败,先
redis-cli ping,再检查防火墙是否放行 6379(本地开发一般关防火墙更省事) - 扩展加载成功但连接失败,错误不在 PHP 层,别反复重装 DLL



















