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 |
优先从副本节点读取,如果副本不可用再从主节点读(你当前使用的策略) |