“connection refused”不是代码错误,而是redis/memcached服务未响应:先用redis-cli ping验证服务状态,再查防火墙、docker网络、云安全组、bind地址及php扩展是否加载。

ThinkPHP缓存驱动报错提示“Connection refused”时,不是代码写错了,而是Redis或Memcached服务根本没响应请求——可能是服务未启动、端口被防火墙拦住、Docker容器网络不通,或者云服务器安全组没放行对应端口。
确认Redis/Memcached服务是否在运行
先别改PHP配置,直接在服务器上验证服务状态:Linux/macOS执行redis-cli ping,如果返回PONG说明Redis正常;若报Could not connect to Redis at 127.0.0.1:6379: Connection refused,就证明服务压根没起来。Memcached同理,用echo "stats" | nc 127.0.0.1 11211测试连通性。
Ubuntu/Debian系统用sudo systemctl status redis-server查Redis状态;CentOS用sudo systemctl status redis;Windows用户需手动打开Redis服务管理器,确认Redis Server进程正在运行。
注意:Docker环境里不能只看宿主机有没有redis-cli,得进容器内部执行命令——docker exec -it your-app-container sh -c "redis-cli -h redis ping",其中redis是Docker Compose中定义的服务名。
检查host和port是否匹配真实服务地址
打开config/cache.php,找到stores.redis配置块,确认'host'不是写成'localhost'——在Docker或某些Linux发行版中,localhost会走Unix socket或IPv6回环,而Redis监听的是127.0.0.1:6379,两者行为不等价。
【host必须填127.0.0.1,不能填localhost】
如果Redis跑在另一台机器上,host要填对方真实IP,且确保该IP能从当前PHP服务器ping通;port不能只看默认值,比如有些云Redis实例用的是6380或自定义端口,得去控制台确认实际端口号。
排查网络拦截层
第一步:用telnet 127.0.0.1 6379(Linux/macOS)或Test-NetConnection 127.0.0.1 -Port 6379(PowerShell)测试端口是否可达。连不上就说明问题出在网络链路。
第二步:如果是云服务器(阿里云/腾讯云/华为云),立刻登录控制台,检查安全组规则——6379端口必须对PHP服务器所在IP段放行(入方向),而不是只放行自己本地IP。
第三步:Docker用户重点检查docker-compose.yml中的networks配置,确保应用容器和redis容器在同一个自定义网络里;若用了bridge网络,host不能写127.0.0.1,得写redis服务名。
SELinux启用的CentOS系统,可能拦截socket连接:临时关闭验证sudo setenforce 0,若问题消失,说明需调整SELinux策略而非改代码。
验证Redis绑定地址与监听模式
Redis默认只监听127.0.0.1,这意味着它拒绝来自其他IP(包括Docker桥接网络、局域网机器)的连接。打开Redis配置文件redis.conf,检查bind行:
若存在bind 127.0.0.1且没有注释掉,必须改为bind 0.0.0.0才能接受所有IP连接(生产环境请配合requirepass和防火墙)。
同时确认protected-mode no已设置,否则Redis在未设密码且bind非127.0.0.1时会主动拒绝外部连接。
改完配置后必须执行sudo systemctl restart redis(或docker restart redis),否则修改不生效。
检查PHP扩展是否加载成功
运行php -r "new Redis();",如果报Class 'Redis' not found,说明PHP redis扩展根本没启用——此时看到的“Connection refused”其实是假象,因为框架连尝试连接的机会都没有,直接抛出扩展缺失异常,但部分日志可能被吞掉,误判为网络问题。
Windows用户打开phpinfo()页面,搜索“redis”,有模块信息才代表扩展已加载;Linux用户执行php -m | grep redis,输出里必须有redis字样。
扩展名写错会导致同样错误:确认php.ini里是extension=redis(PHP 7.4+),不是extension=php_redis.dll(旧版)或extension=redis.so(路径错误)。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











