SpringBoot 1.x Redis 主从同步 + 哨兵模式配置 | Lettuce 连接池实现
SpringBoot 1.x + RedisTemplate + Lettuce 连接池实现 Redis 主从同步 + 哨兵模式配置
本文将介绍如何在 SpringBoot 1.x 版本中使用 Lettuce 连接池实现 Redis 主从同步和哨兵模式配置。
1. 引入依赖
在 pom.xml 文件中引入以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</dependency>
2. RedisTemplate 配置
在 SpringBoot 1.x 版本中,可以通过实现 org.springframework.data.redis.connection.RedisConnectionFactory 接口来自定义 Redis 连接工厂。这里我们使用 Lettuce 连接池来实现 Redis 主从同步和哨兵模式配置。
@Configuration
public class RedisConfig {
@Value('${spring.redis.host}')
private String host;
@Value('${spring.redis.port}')
private int port;
@Value('${spring.redis.password}')
private String password;
@Value('${spring.redis.database}')
private int database;
@Value('${spring.redis.sentinel.master}')
private String master;
@Value('${spring.redis.sentinel.nodes}')
private String nodes;
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
// 设置key和value的序列化方式
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
// 设置hash key和value的序列化方式
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
@Bean
public LettuceConnectionFactory lettuceConnectionFactory() {
RedisSentinelConfiguration sentinelConfiguration = new RedisSentinelConfiguration();
sentinelConfiguration.master(master);
sentinelConfiguration.setSentinels(parseSentinels());
LettuceClientConfiguration clientConfiguration = LettuceClientConfiguration.builder()
.commandTimeout(Duration.ofSeconds(10))
.build();
return new LettuceConnectionFactory(sentinelConfiguration, clientConfiguration);
}
private Set<RedisNode> parseSentinels() {
String[] nodesArr = nodes.split(',');
Set<RedisNode> sentinelNodes = new HashSet<>();
for (String node : nodesArr) {
String[] parts = node.split(':');
sentinelNodes.add(new RedisNode(parts[0], Integer.parseInt(parts[1])));
}
return sentinelNodes;
}
}
在上面的代码中,我们使用了 RedisSentinelConfiguration 来配置哨兵模式,并使用 LettuceClientConfiguration 来配置连接池信息。
3. 配置文件
在 application.properties 或 application.yml 中配置 Redis 相关信息。
# Redis主从同步配置
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0
# 哨兵模式配置
spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381
4. 测试
在代码中使用 Autowired 注入 RedisTemplate,然后使用其提供的方法操作 Redis 即可。
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void testRedis() {
redisTemplate.opsForValue().set('name', 'tom');
String name = (String) redisTemplate.opsForValue().get('name');
System.out.println(name);
}
原文地址: https://www.cveoy.top/t/topic/nPUR 著作权归作者所有。请勿转载和采集!