当前位置: 首页 > news >正文

springboot+redis集群实现集群拓扑动态刷新温故

springboot项目,并集成redis集群,当redis集群节点宕掉后又恢复了,但springboot调用redis集群服务报错,下面对springboot集成redis集群实现集群拓扑动态刷新进行温习和巩固。

原因分析:
使用lettuce连接redis集群实例,一个redis节点宕掉之后,实例执行规格变更后,分片数有变化时,部分槽位(Slot)会迁移到新分片上,当客户端连接到新分片时会出现报错。
解决方法:

  • jedis client默认自动支持(由于jedis通过自身异常反馈来识别重连、刷新服务端的集群信息机制,保证其自动故障恢复)
  • luttuce client 默认未开启,需要手动开启刷新
  • springboot 1.x之前版本默认使用jedis,无需要手动开启刷新
  • springboot 2.x,redis client默认为Lettuce,默认不支持拓扑刷新解决方案:
  • 使用jedis,不需要手动指定开启刷新
  • 使用lettuce,需要设置开启刷新节点拓扑策略
  • springboot 2.3.0开始,支持集群拓扑刷新功能,属性配置开启即可

下面为springboot2.3.10版本集成redis集群的配置实例
1、redis集群配置
redis集群需要搭建3主3从,在搭建用于公司生产环境的集群时,搭建3主6从,这样不会一个节点宕机导致全部宕机,可靠性更高,会搭3主3从就会搭3主6从。redis集群搭建参考大佬相关博文即可,此处不再介绍。
2、springboot集成redis集群
pom依赖

<!--默认是lettuce客户端-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- redis依赖commons-pool 这个依赖一定要添加 -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>

application.yml配置如下

spring:application:name: testredis:lettuce:pool:max-active: 8   # 连接池最大连接数默认值为8 max-wait: -1ms  # 连接池最大阻塞时间(使用负值表示没有限制)默认值为-1max-idle: 8     # 连接池中最大空闲连接数默认值为8min-idle: 0     # 连接池中的最小空闲连接数,默认值为0cluster:# 感知集群的主从切换refresh:adaptive: true    #支持集群拓扑动态感应刷新,自适应拓扑刷新是否使用所有可用的更新,默认false关闭period: 2000      #定时刷新cluster:nodes: - 192.168.1.11:7306 - 192.168.1.11:7305- 192.168.1.11:7304- 192.168.1.11:7303- 192.168.1.11:7302- 192.168.1.11:7301max-redirects: 3

或application.properties配置

spring.redis.lettuce.cluster.refresh.adaptive=true
spring.redis.lettuce.cluster.refresh.period=5000

springboot2.3 以后加上下面配置可自动刷新拓扑,某节点挂掉后,会有新的主从关系,如果不配置,调用接口时程序会报错。

http://www.lryc.cn/news/421296.html

相关文章:

  • LoadRunner常用函数介绍
  • 通讯录管理系统
  • 基于Python爬虫+机器学习的长沙市租房价格预测研究
  • 开发效率翻倍攻略!大学生电脑小白管理秘籍,资料秒搜技巧大公开!C盘满了怎么办?如何快速安全的清理C盘?烦人的电脑问题?一键解决!
  • [C#数据加密]——MD5、SHA、AES、RSA
  • QT不阻塞UI的方式
  • 鸿蒙HarmonyOS开发:常用布局及实用技巧
  • 【解答】洛必达法则的使用条件及常见错误,洛必达法则的适用条件,常见的易错点,2022数一第一题例题
  • 使用Python下载飞书共享表格数据教程
  • 【C++】protobuf的简单使用(通讯录例子)
  • Apple 智能基础语言模型
  • GreptimeDB融资数百万美元; Oracle提供免费长期MySQL; 谷歌大模型支持云数据库问题洞察
  • Java中的抽象类与接口
  • 云计算概念以及与云服务的区别
  • Netty技术全解析:LengthFieldBaseFrameDecoder类深度解析
  • 深入InnoDB核心:揭秘B+树在数据库索引中的高效应用
  • c++(面向对象的性质:抽象,封装,继承,多态)
  • java基础学习笔记1
  • [VBA]使用VBA在Excel中 操作 形状shape 对象
  • Apache POI 实现 Excel 表格下载
  • 大华嵌入式面试题大全及参考答案(2万字长文)
  • C语言——查漏补缺
  • Python | Leetcode Python题解之第328题奇偶链表
  • 吉瑞外卖笔记
  • Perl套接字编程指南:构建网络通信应用
  • 达梦数据库(十) -------- mybatis-plus 整合达梦时,自动生成的 sql 语句报错
  • 停止项目大小调整,开始搜索层自动缩放!
  • VScode的环境编译器选择
  • 在Linux中通过docker安装和配置supervisor进程守护
  • CanMV-K230自学笔记系列(不定期更新)