解决go-redis v9 集群连接报i/o timeout 问题

作者在服务器搭建Redis集群,测试运行正常,但连接报错。经分析,因Redis配置文件bind内网IP,集群模式自动用内网IP致本地无法访问。解决办法是添加配置,修改集群节点,通过自定义函数将内网IP转为公网IP,使集群正常连接,还表示后续会更新其他解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人在服务器上搭建了redis集群,并且经过测试集群一切运行正常,但是连接时发现报错:

 "dial xxx i/o timeout"

我的代码是这样的

 

然后我通过连接每个redis节点都是正常的

经过我的一顿分析,因为我的redis是搭建在服务器上的,并且配置文件中bind的是内网ip,而我单个节点通过公网ip访问确实没有问题,但是一使用集群模式就会自动使用集群中配置的ip,即内网ip,这样就导致了本地无法访问的该ip

解决办法:

添加配置,修改每个集群节点

添加NewClient配置后会根据配置Addrs的输了进行循环

opt会返回当前节点的信息,我们可以从从获取到返回的配置的内网ip

 userPassForAddr是自定义的函数,通过传入的内网ip对比端口号,返回公网ip,从而实现将每个节点改为公网ip,这样集群就能正常连接了

 

另外我还有2中解决办法,日后有空了更新 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值