SpringBoot1X+ RedisTemplate + JedisSentinelPool连接池方式实现Redis主从同步+哨兵模式配置
- 引入依赖
在pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
- 配置哨兵模式
在application.properties中配置哨兵模式,例如:
spring.redis.sentinel.master=master
spring.redis.sentinel.nodes=127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381
其中,spring.redis.sentinel.master为哨兵模式中的主节点名称,spring.redis.sentinel.nodes为哨兵节点的地址列表。
- 配置RedisTemplate
在配置类中添加以下代码:
@Configuration
public class RedisConfig {
@Value("${spring.redis.sentinel.master}")
private String masterName;
@Value("${spring.redis.sentinel.nodes}")
private String sentinelNodes;
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(jedisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
public JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(sentinelConfig(), jedisPoolConfig());
jedisConnectionFactory.setPassword("password"); // 如果有密码,设置密码
return jedisConnectionFactory;
}
public RedisSentinelConfiguration sentinelConfig() {
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration();
sentinelConfig.master(masterName);
sentinelConfig.setSentinels(createSentinels(sentinelNodes));
return sentinelConfig;
}
public Set<RedisNode> createSentinels(String sentinelNodes) {
Set<RedisNode> nodes = new HashSet<>();
String[] array = sentinelNodes.split(",");
for (String str : array) {
nodes.add(new RedisNode(str.split(":")[0], Integer.parseInt(str.split(":")[1])));
}
return nodes;
}
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(500);
jedisPoolConfig.setMaxIdle(100);
jedisPoolConfig.setMinIdle(50);
jedisPoolConfig.setMaxWaitMillis(5000);
return jedisPoolConfig;
}
}
其中,RedisTemplate用于操作Redis,JedisConnectionFactory用于创建连接,RedisSentinelConfiguration用于配置哨兵模式,JedisPoolConfig用于配置连接池。
- 测试Redis主从同步
在测试类中添加以下代码:
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Test
public void test() {
redisTemplate.opsForValue().set("key", "value");
String value = (String) redisTemplate.opsForValue().get("key");
System.out.println(value);
}
运行测试类,如果输出为value,则说明Redis主从同步成功
原文地址: https://www.cveoy.top/t/topic/en8Z 著作权归作者所有。请勿转载和采集!