如何解决ThinkPHP中Redis缓存驱动连接故障及PHP扩展安装与连接池配置问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1072个文字,预计阅读时间需要5分钟。
在ThinkPHP项目中,大量遇到Redis连接失败问题,根本不是代码写错了,而是PHP扩展没安装、配置没生效,或长连接使用错误等地方出了问题。
Redis 扩展没启用,Class 'Redis' 直接报错
这是最底层的拦路虎。ThinkPHP 的 cache 驱动依赖 phpredis 扩展,不是 Predis;Predis 是纯 PHP 实现,但 TP 默认不走它,除非你手动指定驱动。
- 运行
php -m | grep redis,输出里必须有redis(不是redis.so文件名,是模块名) - 如果没看到,说明扩展没加载:检查
php.ini是否写了extension=redis.so(Linux)或extension=php_redis.dll(Windows),且路径正确 -
phpinfo()页面里搜 “redis”,确认 “Redis Support” 显示 enabled,且版本不低于 5.3.0(TP6 要求) - 重启 PHP-FPM 或 Apache/Nginx,否则改了配置也白搭
pconnect() 在 PHP-FPM 下生效,但在 Swoole 中会泄漏
ThinkPHP 默认用 connect(),每次请求新建连接;设 'persistent' => true 才会触发 pconnect()。
本文共计1072个文字,预计阅读时间需要5分钟。
在ThinkPHP项目中,大量遇到Redis连接失败问题,根本不是代码写错了,而是PHP扩展没安装、配置没生效,或长连接使用错误等地方出了问题。
Redis 扩展没启用,Class 'Redis' 直接报错
这是最底层的拦路虎。ThinkPHP 的 cache 驱动依赖 phpredis 扩展,不是 Predis;Predis 是纯 PHP 实现,但 TP 默认不走它,除非你手动指定驱动。
- 运行
php -m | grep redis,输出里必须有redis(不是redis.so文件名,是模块名) - 如果没看到,说明扩展没加载:检查
php.ini是否写了extension=redis.so(Linux)或extension=php_redis.dll(Windows),且路径正确 -
phpinfo()页面里搜 “redis”,确认 “Redis Support” 显示 enabled,且版本不低于 5.3.0(TP6 要求) - 重启 PHP-FPM 或 Apache/Nginx,否则改了配置也白搭
pconnect() 在 PHP-FPM 下生效,但在 Swoole 中会泄漏
ThinkPHP 默认用 connect(),每次请求新建连接;设 'persistent' => true 才会触发 pconnect()。

