[3-02-01].第14节:三方整合 - SpringData整合Redis集群

Redis大纲


一、SpringBoot整合主从架构的Redis:

1.1.问题说明:

  • 1.在Sentinel集群监管下的Redis哨兵架构中,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化,及时更新连接信息
  • 2.SpringBoot中的RedisTemplate底层利用lettuce实现了节点的感知和自动切换,我们需要进行配置才可以实现这种动态上下线的情况。下面,我们通过一个测试来实现RedisTemplate集成哨兵机制

1.2.编码实现:

  • 1.建module
  • 2.改pom,引入依赖:
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-data-redisartifactId>
dependency>
  • 3.改yml:配置Redis地址,然后在配置文件application.yml中指定redis的sentinel相关信息:
spring:
  redis:
    sentinel:
      master: mymaster
      nodes:
        - 192.168.150.101:27001
        - 192.168.150.101:27002
        - 192.168.150.101:27003
  • 4.配置感知redis动态的上下线:配置读写分离,即在项目的启动类中,添加一个新的bean:
    [3-02-01].第14节:三方整合 - SpringData整合Redis集群_第1张图片

这个bean中配置的就是读写策略,包括四种:

  • MASTER:从主节点读取
  • MASTER_PREFERRED:优先从master节点读取,master不可用才读取replica
  • REPLICA:从slave(replica)节点读取
  • REPLICA _PREFERRED:优先从slave(replica)节点读取,所有的slave都不可用才读取master

二、SpringBoot整合Redis集群架构的Redis:

2.1.实现步骤:

  • 1.启动6台Redis
  • 2.改yml:
server.port=7777
spring.application.name=redis7_study

# ========================logging=====================
logging.level.root=info
logging.level.com.atguigu.redis7=info
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger- %msg%n 

logging.file.name=D:/mylogs2023/redis7_study.log
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger- %msg%n

# ========================swagger=====================
spring.swagger2.enabled=true
#在springboot2.6.X结合swagger2.9.X会提示documentationPluginsBootstrapper空指针异常,
#原因是在springboot2.6.X中将SpringMVC默认路径匹配策略从AntPathMatcher更改为PathPatternParser,
# 导致出错,解决办法是matching-strategy切换回之前ant_path_matcher
spring.mvc.pathmatch.matching-strategy=ant_path_matcher


# ========================redis集群=====================
spring.redis.password=111111
# 获取失败 最大重定向次数
spring.redis.cluster.max-redirects=3
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1ms
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0
spring.redis.cluster.nodes=192.168.111.175:6381,192.168.111.175:6382,192.168.111.172:6383,192.168.111.172:6384,192.168.111.174:6385,192.168.111.174:6386  # 3主3从的集群架构,6台机器地址

2.2.集群问题分析:

a.经典问题描述:

  • 在集群架构中,当有某台主机挂掉的时候,在redis集群中,只要正确配置了redis架构,那么主机下面的从机会顺利上位,变成主机,那么此时6台机器就变成了5台机器,此时微服务再次连接redis的时候会转圈圈,最终报错,那么java程序怎么感知这种集群中某台机器动态上下线的变化??
    [3-02-01].第14节:三方整合 - SpringData整合Redis集群_第2张图片

b.原因分析:

  • SpringBoot2.x当中,Redis底层默认是使用的Lettuce,当redis集群节点发生变换的时候,Letture默认是不会动态刷新redis拓扑图,所以导致redis连接失败

c.解决办法:刷新节点集群拓扑,动态感应:

  • 1.改写YML:添加动态刷新配置:
    [3-02-01].第14节:三方整合 - SpringData整合Redis集群_第3张图片

综上:对于解决感知redis动态上下线的配置方式,在集群和主从架构中采取了两者方式,这两种方式不论什么架构是都可以使用的,但是一般采取更改配置文件的方式,这个方式比较简单

你可能感兴趣的:(阶段03:企业框架,spring,boot)