Redis集群Lettuce主从切换问题
一、问题描述Redis Cluster集群当master宕机主从切换客户端报错 timed out二、原因SpringBoot2.X版本开始Redis默认的连接池都是采用的Lettuce。当节点发生改变后Letture默认是不会刷新节点拓扑的。三、解决方案3.1 方案一把lettuce换成jedis只需要在pom.xml里调整一下依赖的引用dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId version2.1.5.RELEASE/version !-- 不用lettuce ,用jedis -- exclusions exclusion groupIdio.lettuce/groupId artifactIdlettuce-core/artifactId /exclusion /exclusions /dependency dependency groupIdredis.clients/groupId artifactIdjedis/artifactId version3.1.0-m4/version /dependency3.2 方案二刷新节点拓扑视图Redis节点异常服务端的Redis集群拓扑被刷新了Java程序没有获取到新的拓扑。Lettuce官方文档中关于Redis Cluster的相关说明Lettuce处理Moved和Ask永久重定向由于命令重定向你必须刷新节点拓扑视图。而自适应拓扑刷新Adaptive updates与定时拓扑刷新Periodic updates是默认关闭的可以通过如下代码打开。https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster#user-content-refreshing-the-cluster-topology-viewLettuce修改代码如下package com.montnets.common.redis; import io.lettuce.core.ClientOptions; import io.lettuce.core.cluster.ClusterClientOptions; import io.lettuce.core.cluster.ClusterTopologyRefreshOptions; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.data.redis.RedisProperties; import org.springframework.context.annotation.Bean; import org.springframework.data.redis.connection.RedisClusterConfiguration; import org.springframework.data.redis.connection.RedisNode; import org.springframework.data.redis.connection.RedisPassword; import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration; import org.springframework.stereotype.Component; import java.time.Duration; import java.util.HashSet; import java.util.List; import java.util.Set; Component public class RedisPoolConfig { Autowired private RedisProperties redisProperties; public GenericObjectPoolConfig? genericObjectPoolConfig(RedisProperties.Pool properties) { GenericObjectPoolConfig? config new GenericObjectPoolConfig(); config.setMaxTotal(properties.getMaxActive()); config.setMaxIdle(properties.getMaxIdle()); config.setMinIdle(properties.getMinIdle()); if (properties.getTimeBetweenEvictionRuns() ! null) { config.setTimeBetweenEvictionRunsMillis(properties.getTimeBetweenEvictionRuns().toMillis()); } if (properties.getMaxWait() ! null) { config.setMaxWaitMillis(properties.getMaxWait().toMillis()); } return config; } Bean(destroyMethod destroy) public LettuceConnectionFactory lettuceConnectionFactory() { //开启 自适应集群拓扑刷新和周期拓扑刷新 ClusterTopologyRefreshOptions clusterTopologyRefreshOptions ClusterTopologyRefreshOptions.builder() // 开启全部自适应刷新 .enableAllAdaptiveRefreshTriggers() // 开启自适应刷新,自适应刷新不开启,Redis集群变更时将会导致连接异常 // 自适应刷新超时时间(默认30秒) .adaptiveRefreshTriggersTimeout(Duration.ofSeconds(30)) //默认关闭开启后时间为30秒 // 开周期刷新 .enablePeriodicRefresh(Duration.ofSeconds(20)) // 默认关闭开启后时间为60秒 ClusterTopologyRefreshOptions.DEFAULT_REFRESH_PERIOD 60 .enablePeriodicRefresh(Duration.ofSeconds(2)) .enablePeriodicRefresh().refreshPeriod(Duration.ofSeconds(2)) .build(); // https://github.com/lettuce-io/lettuce-core/wiki/Client-Options ClientOptions clientOptions ClusterClientOptions.builder() .topologyRefreshOptions(clusterTopologyRefreshOptions) .build(); LettuceClientConfiguration clientConfig LettucePoolingClientConfiguration.builder() .poolConfig(genericObjectPoolConfig(redisProperties.getJedis().getPool())) //.readFrom(ReadFrom.MASTER_PREFERRED) .clientOptions(clientOptions) .commandTimeout(redisProperties.getTimeout()) //默认RedisURI.DEFAULT_TIMEOUT 60 .build(); ListString clusterNodes redisProperties.getCluster().getNodes(); SetRedisNode nodes new HashSetRedisNode(); clusterNodes.forEach(address - nodes.add(new RedisNode(address.split(:)[0].trim(), Integer.valueOf(address.split(:)[1])))); RedisClusterConfiguration clusterConfiguration new RedisClusterConfiguration(); clusterConfiguration.setClusterNodes(nodes); clusterConfiguration.setPassword(RedisPassword.of(redisProperties.getPassword())); clusterConfiguration.setMaxRedirects(redisProperties.getCluster().getMaxRedirects()); LettuceConnectionFactory lettuceConnectionFactory new LettuceConnectionFactory(clusterConfiguration, clientConfig); // lettuceConnectionFactory.setShareNativeConnection(false); //是否允许多个线程操作共用同一个缓存连接默认truefalse时每个操作都将开辟新的连接 // lettuceConnectionFactory.resetConnection(); // 重置底层共享连接, 在接下来的访问时初始化 return lettuceConnectionFactory; } }AI大模型学习福利作为一名热心肠的互联网老兵我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。一、全套AGI大模型学习路线AI大模型时代的学习之旅从基础到前沿掌握人工智能的核心技能因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取二、640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获三、AI大模型经典PDF籍随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获四、AI大模型商业化落地方案因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获作为普通人入局大模型时代需要持续学习和实践不断提高自己的技能和认知水平同时也需要有责任感和伦理意识为人工智能的健康发展贡献力量。

相关新闻

优阅达再度获得 HubSpot 亚太区合作伙伴表彰,荣膺 2025 最佳增长合作伙伴

优阅达再度获得 HubSpot 亚太区合作伙伴表彰,荣膺 2025 最佳增长合作伙伴

过去一年,优阅达在 HubSpot 业务上实现了近 300% 的业绩增长,行业服务范围进一步拓展至多个垂直领域,客户规模与项目复杂度均实现质的飞跃。 近日,在 HubSpot 亚太区合作伙伴年度峰会上,优阅达(DKM ECO&am…

2026/7/7 12:49:47 阅读更多 →
对话式AI大赛揭晓:Emory大学团队赢得Alexa大奖

对话式AI大赛揭晓:Emory大学团队赢得Alexa大奖

埃默里大学团队赢得Alexa Prize Grand Challenge 3大奖 团队因其Emora社交机器人的表现获得了50万美元奖金。 今天,某中心宣布埃默里大学团队成为2020年Alexa Prize的获胜者。“祝贺埃默里大学团队,他们令人印象深刻的工作使得人类与Alexa之间的对话更…

2026/7/5 22:48:13 阅读更多 →
vue3中ES6 对象解构赋值中的重命名语法(如:预览文件和阅览文件)

vue3中ES6 对象解构赋值中的重命名语法(如:预览文件和阅览文件)

应用示例&#xff1a;src\components\common\CommonFileManager.vue// 文件预览抽屉实例对象 const filePreviewDrawerRef ref<InstanceType<typeof BaseFilePreviewDrawer> | null>(null); // 预览文件相关状态 const { currentPreviewFile, fetchPreviewFile } …

2026/7/6 17:12:28 阅读更多 →

最新新闻

Cesium@1.138中实现交互式多边形绘制与编辑工具类

Cesium@1.138中实现交互式多边形绘制与编辑工具类

/*** Cesium 交互式多边形绘制与编辑工具类&#xff08;草绿色系版&#xff09;*/ class PolygonDrawer {constructor(Cesium, viewer, options {}) {this.Cesium Cesium;this.viewer viewer;this.onFinish options.onFinish || (() > {});this.onEdit options.onEdit …

2026/7/8 5:12:37 阅读更多 →
WuWa-Mod终极指南:彻底解放鸣潮游戏潜能的15种神奇模组

WuWa-Mod终极指南:彻底解放鸣潮游戏潜能的15种神奇模组

WuWa-Mod终极指南&#xff1a;彻底解放鸣潮游戏潜能的15种神奇模组 【免费下载链接】wuwa-mod Wuthering Waves pak mods 项目地址: https://gitcode.com/GitHub_Trending/wu/wuwa-mod 还在为鸣潮游戏中的各种限制感到束手束脚吗&#xff1f;WuWa-Mod作为目前最受欢迎的…

2026/7/8 5:10:37 阅读更多 →
机械加工企业必看!ISO9001认证办理全流程拆解,一步到位不踩坑

机械加工企业必看!ISO9001认证办理全流程拆解,一步到位不踩坑

不少机械加工企业想办理ISO9001认证&#xff0c;却因不熟悉流程&#xff0c;要么盲目准备导致反复返工&#xff0c;要么被不专业机构误导走弯路。其实&#xff0c;ISO9001认证办理有清晰的标准化流程&#xff0c;只要把握关键节点&#xff0c;就能高效推进。整个流程分为三个核…

2026/7/8 5:10:37 阅读更多 →
计算机毕业设计之基于vue的零食销售系统

计算机毕业设计之基于vue的零食销售系统

随着互联网技术与电商行业的深度融合&#xff0c;传统零食销售模式面临渠道单一、运营效率低下等挑战&#xff0c;数字化转型成为行业发展的必然趋势。本研究针对零食销售场景的痛点&#xff0c;设计并实现了一套基于B/S架构的现代化电商平台&#xff0c;采用Java语言与Spring …

2026/7/8 5:10:37 阅读更多 →
Horizon Connection Server 证书配置:3步排查自签名证书无效与‘vdm’友好名缺失

Horizon Connection Server 证书配置:3步排查自签名证书无效与‘vdm’友好名缺失

Horizon Connection Server证书配置实战&#xff1a;从自签名无效到"vdm"友好名缺失的深度解析在虚拟桌面基础设施(VDI)的部署中&#xff0c;Horizon Connection Server作为核心组件&#xff0c;其证书配置的准确性直接关系到整个系统的安全性和可用性。许多管理员在…

2026/7/8 5:06:37 阅读更多 →
PMP 考纲大换血倒计时:9 月末班车,错过再等十年

PMP 考纲大换血倒计时:9 月末班车,错过再等十年

如果你一直在观望 PMP 认证&#xff0c;现在必须认真对待一个消息——PMI 官方已敲定&#xff0c;2026 年 12 月起国内正式启用第八版全新考纲。这次升级堪称近十年来最猛烈的变革&#xff1a;题型重塑、考点重排、知识权重全盘洗牌&#xff0c;考试门槛将被大幅抬高。而 9 月这…

2026/7/8 5:04:36 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验&#xff1a;MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级&#xff0c;许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中&#xff0c;可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC&#xff0c;配合PIC18F45K22微控制器&#xff0c;能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻