背景
redis集群的时候,有一个master节点挂机了。
springboot中调用redis的时候,会测试连接每一个node节点。
这时候就会报错,连不上XX.XX.XX.XX:port(ip:port)。
原因
redis集群采用了默认的luttuce连接池技术。
(lettuce和jedis pool都是一种连接redis的池化方式,
springboot中构建RedisConnectionFactory bean的时候,
需要两个configure 参数:pool相关和redis cluster相关)
lettuce连接redis集群的时候,默认不会改变redis集群的拓扑结构
redis配置的节点中,一个挂机了,但是集群拓扑结构没有更新,
lettuce维持有问题的拓扑机构,所以报错,所以需要更新rediscluster拓扑结构。
--及时更新拓扑结构
修复手段
扩展lettuce connection factory 相关的bean。
让这个bean及时更新redis集群的拓扑结构,就是lettuce连接池不维持挂机的节点。
解决问题参考文档
lettuce官文:
https://lettuce.io/core/release/reference/index.html#clientoptions.cluster-specific-options
网上同样案例(如果你的redis集群设置了密码,这个参考中就需要设置密码):