springBoot整合Redis哨兵读写分离l
<!-- mvnrepository/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 提供Redis连接池 -->
<dependency>
<groupId>org.apachemons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
配置⽂件
server:
port: 9001
spring:
redis:
#    host: 172.16.180.23
#    port: 6379
#    database: 0
#    password: ''
timeout: 6000
>>>####以下为redis哨兵增加的配置>>>>>##
sentinel:
nodes: 172.16.180.23:26379,172.16.180.23:26380,172.16.180.23:26381
master: mymaster
>>>####以下为lettuce连接池增加的配置>>>>>##
lettuce:
pool:
max-active:  100 # 连接池最⼤连接数(使⽤负值表⽰没有限制)
max-idle: 100 # 连接池中的最⼤空闲连接
min-idle: 50 # 连接池中的最⼩空闲连接
max-wait: 6000 # 连接池最⼤阻塞等待时间(使⽤负值表⽰没有限制
RedisTemplate配置
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory factory) {
//创建Json序列化对象
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
//解决查询缓存转换异常的问题
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
jackson2JsonRedisSerializer.setObjectMapper(om);
// 将默认序列化改为Jackson2JsonRedisSerializer序列化
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setKeySerializer(jackson2JsonRedisSerializer);// key序列化
template.setValueSerializer(jackson2JsonRedisSerializer);// value序列化
template.setHashKeySerializer(jackson2JsonRedisSerializer);// Hash key序列化
template.setHashValueSerializer(jackson2JsonRedisSerializer);// Hash value序列化
template.setConnectionFactory(factory);
template.afterPropertiesSet();
return template;
}
}
Redis哨兵配置
@Configuration
@ConfigurationProperties(prefix = "dis.sentinel")
public class RedisSentinelConfig {
@Value("dis.des")
private Set<String> nodes;
@Value("dis.timeout.sentinel.master")
private String master;
@Value("${dis.timeout}")
private long timeout;
/
/@Value("${dis.password}")
//private String password;
@Value("${dis.lettuce.pool.max-idle}")
private int maxIdle;
@Value("${dis.lettuce.pool.min-idle}")
private int minIdle;
@Value("${dis.lettuce.pool.max-wait}")
private long maxWait;
@Value("${dis.lettuce.pool.max-active}")
private int maxActive;
@Bean
public RedisConnectionFactory lettuceConnectionFactory() {
RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration(master, nodes);
NamedNode master = Master();
String name = Name();
//redisSentinelConfiguration.setPassword(RedisPassword.CharArray()));
GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
genericObjectPoolConfig.setMaxIdle(maxIdle);
genericObjectPoolConfig.setMinIdle(minIdle);
genericObjectPoolConfig.setMaxTotal(maxActive);
genericObjectPoolConfig.setMaxWaitMillis(maxWait);
/
/readFrom(ReadFrom.REPLICA) 可设置,设置了就形成读写分离,读会读取从节点,但是因为有复制过程,要能容忍短时间的脏数据,适合对数据要求不太及时的        LettucePoolingClientConfiguration lettuceClientConfiguration = LettucePoolingClientConfiguration.builder()
.poolConfig(genericObjectPoolConfig).readFrom(ReadFrom.REPLICA)
.build();
return new LettuceConnectionFactory(redisSentinelConfiguration, lettuceClientConfiguration);
}
public void setNodes(Set<String> nodes) {
}
public void setMaster(String master) {
this.master = master;
}
}
RedisService
@Service
public class RedisSentinelService {
@Autowired
@Resource(name = "stringRedisTemplate")
private RedisTemplate redisTemplate;
sping怎么读public void redisM1(){
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("s1","测试redis联通");
}
}
RediSentinelController
@RestController
@RequestMapping("/rediSentinel")
public class RediSentinelController {
@Autowired
private RedisSentinelService redisSentinelService;
@GetMapping("redisSentinelM1")
public void redisSentinelM1() {
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论