redis desktop manager 连接集群_探错笔记之redis集群出现单节点宕机应用无法正常连接...

点击上方"开发者的花花世界",选择"设为星标"技术干货不定时送达!

项目中 redis集群出现单节点宕机,造成master迁移,但是发现应用无法正常连接redis

问题场景

Redis集群出现单节点异常造成master迁移时,底层基于Lettuce实现的应用程序无法正常连接Redis

分析

分析了代码,发现默认Lettuce是不会刷新拓扑io.lettuce.core.cluster.models.partitions.Partitions#slotCache,最终造成槽点查找节点依旧找到老的节点,自然访问不了了

解决方案

直接上代码,通过配置ClusterTopologyRefreshOptions开启刷新

/**             * ClusterTopologyRefreshOptions配置用于开启自适应刷新和定时刷新。如自适应刷新不开启,             * Redis集群变更时将会导致连接异常!             */            ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder()                    // 开启自适应刷新                    .enableAdaptiveRefreshTrigger(ClusterTopologyRefreshOptions.RefreshTrigger.MOVED_REDIRECT,                            ClusterTopologyRefreshOptions.RefreshTrigger.PERSISTENT_RECONNECTS)                    // 开启所有自适应刷新,MOVED,ASK,PERSISTENT都会触发                    // .enableAllAdaptiveRefreshTriggers()                    // 自适应刷新超时时间(默认30秒)                    .adaptiveRefreshTriggersTimeout(Duration.ofSeconds(25)) // 默认关闭开启后时间为30秒                    // 开周期刷新                    .enablePeriodicRefresh(Duration.ofSeconds(20)) // 默认关闭开启后时间为60秒                    // ClusterTopologyRefreshOptions.DEFAULT_REFRESH_PERIOD                    // 60 .enablePeriodicRefresh(Duration.ofSeconds(2)) =                    // .enablePeriodicRefresh().refreshPeriod(Duration.ofSeconds(2))                    .build();            clientConfig = LettucePoolingClientConfiguration.builder().commandTimeout(redisProperties.getTimeout())                    .poolConfig(genericObjectPoolConfig)                    .clientOptions(                            ClusterClientOptions.builder().topologyRefreshOptions(topologyRefreshOptions).build())                    // 将appID传入连接,方便Redis监控中查看                    // .clientName(appName + "_lettuce")                    .build();

关注Github:1/2极客[1]

关注博客:御前提笔小书童[2]

关注网站:HuMingfeng[3]

关注公众号:开发者的花花世界

5f6e23023ec8a35bacc1dff8e82cf25a.png

References

[1] 1/2极客: https://github.com/humingfeng[2] 御前提笔小书童: https://blog.csdn.net/qq_22260641[3] HuMingfeng: https://royalscholar.cn

喜欢就点个"在看"呗^_^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值