SpringBoot 实现 Redis读写分离

发布于:2025-07-16 ⋅ 阅读:(18) ⋅ 点赞:(0)

RedisTemplate的哨兵模式

在Sentinel集群监管下的Redis主从集群,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化,及时更新连接信息。Spring的RedisTemplate底层利用lettuce实现了节点的感知和自动切换。

1.在pom文件中引入redis的starter依赖:

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2.然后在配置文件application.yml中指定sentinel相关信息:

spring:
  redis:
    sentinel:
      master: mymaster #sentinel中配置的主节点名称(必须和Sentinel中配置一致!!!)
      nodes:  #配置的各个sentinel节点
        - 192.168.101.129:27001
        - 192.168.101.129:27002
        - 192.168.101.129:27003

3.自定义 Lettuce 客户端的行为配置,配置Redis 读取操作时的 读取策略(ReadFrom)

    @Bean
    public LettuceClientConfigurationBuilderCustomizer configurationBuilderCustomizer(){
        return new LettuceClientConfigurationBuilderCustomizer() {
            @Override
            public void customize(LettuceClientConfiguration.LettuceClientConfigurationBuilder clientConfigurationBuilder) {
                /**
                 * MASTER:从主节点读取
                 * MASTER_PREFERRED:优先从master节点读取,master不可用才读取replica
                 * REPLICA:从slave(replica)节点读取
                 * REPLICA _PREFERRED:优先从slave(replica)节点读取,所有的slave都不可用才读取master
                 */

               //配置优先从slave(replica)节点读取,所有的slave都不可用才读取master
                clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
            }
        };
    }

🧠 ReadFrom 策略详解

枚举值 含义
MASTER 强制从主节点读取(默认行为)
MASTER_PREFERRED 优先从主节点读取,主节点不可用则从副本节点读
REPLICA 只从副本节点读取(如果没有可用副本会失败)
REPLICA_PREFERRED 优先从副本节点读取,如果副本不可用再从主节点读(你当前使用的策略)

网站公告

今日签到

点亮在社区的每一天
去签到