问题描述
在PHP应用中,连接Redis的方法报错 RedisException(code: 0): Connection refused at /data/Redis/Connectors/PhpRedisConnector.php
production.ERROR: Connection refused {"exception":"[object] (RedisException(code: 0): Connection refused at /data/Redis/Connectors/PhpRedisConnector.php:153) [stacktrace] #0 /data/Redis/Connectors/PhpRedisConnector.php(153): Redis->connect() #1 /data/Redis/Connectors/PhpRedisConnector.php(84): \\Redis\\Connectors\\PhpRedisConnector->establishConnection() #2 /data/Support/helpers.php(263): \\Redis\\Connectors\\PhpRedisConnector->\\Redis\\Connectors\\{closure}() #3 /data/Redis/Connectors/PhpRedisConnector.php(121): tap() #4 /data/Redis/Connectors/PhpRedisConnector.php(28): \\Redis\\Connectors\\PhpRedisConnector->createClient() #5 /data/Redis/Connectors/PhpRedisConnector.php(32): \\Redis\\Connectors\\PhpRedisConnector->\\Redis\\Connectors\\{closure}() #6 /data/Redis/RedisManager.php(112): \\Redis\\Connectors\\PhpRedisConnector->connect()
问题解答
Redis 中的错误消息“ Connection refused (连接被拒绝)”通常表示 Redis 服务器不接受传入连接。
此错误可能是由多种原因引起的,例如网络连接问题、防火墙限制或 Redis 服务器关闭。
可以尝试以下步骤来排查问题:
1: 验证 Redis 服务器是否正在运行并接受连接。通过运行以下命令来检查 Redis 服务器的状态:“redis-cli ping”。如果 Redis 服务器正在运行,则应返回“PONG”
- 参考文档:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-troubleshoot-connectivity#test-connectivity-using-redis-cli
- 如果Redis服务没有配置防火墙,可以公网访问。则可以在Azure Redis门户页面的 Redis Console 中直接输入 ping 来验证服务端状态
- 如果需要在Linux中,用redis-cli 并使用6380端口连接Redis服务,可参考博文:https://www.cnblogs.com/lulight/p/14188279.html (Linux VM使用6380端口(SSL方式)连接Azure Redis (redis-cli & stunnel))
2: 检查是否有任何防火墙限制阻止与 Redis 服务器的连接。可以尝试暂时禁用防火墙,看看它是否能解决问题。Redis 服务端的设置参考:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-network-isolation#azure-firewall-rules
3: 验证 Redis 服务器是否配置为侦听正确的 IP 地址和端口。可以检查应用中 Redis 配置文件 (redis.conf) 以确保“绑定”和“端口”设置正确。(如果应用之前正常运行的情况下,可以忽略此点)
4: 检查客户端和 Redis 服务器之间是否存在任何网络连接问题。尝试从客户端计算机 ping Redis 服务器,以查看是否存在任何网络连接问题。参考:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-troubleshoot-connectivity#test-connectivity-using-psping