SpringBoot 1.X Redis 哨兵模式 JedisSentinelPool 操作数据教程
- 引入依赖
在 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>
- 配置 Redis 哨兵模式
在 application.properties 文件中配置 Redis 哨兵模式相关参数:
# Redis 哨兵模式
spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381
spring.redis.password=123456
- 创建 JedisSentinelPool 对象
在 SpringBoot 项目启动时,创建 JedisSentinelPool 对象并注入到 Spring 容器中:
@Configuration
public class RedisConfig {
@Value('${spring.redis.sentinel.master}')
private String masterName;
@Value('${spring.redis.sentinel.nodes}')
private String sentinelNodes;
@Value('${spring.redis.password}')
private String password;
@Bean
public JedisSentinelPool jedisSentinelPool() {
Set<String> sentinels = new HashSet<>(Arrays.asList(sentinelNodes.split(',')));
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(100);
poolConfig.setMaxIdle(50);
poolConfig.setMinIdle(20);
poolConfig.setMaxWaitMillis(2000);
JedisSentinelPool jedisSentinelPool = new JedisSentinelPool(masterName, sentinels, poolConfig, password);
return jedisSentinelPool;
}
}
- 使用 JedisSentinelPool 对象操作数据
在需要使用 Redis 操作的地方,注入 JedisSentinelPool 对象并使用它进行 Redis 操作:
@Service
public class RedisService {
@Autowired
private JedisSentinelPool jedisSentinelPool;
public void set(String key, String value) {
try (Jedis jedis = jedisSentinelPool.getResource()) {
jedis.set(key, value);
}
}
public String get(String key) {
try (Jedis jedis = jedisSentinelPool.getResource()) {
return jedis.get(key);
}
}
}
以上代码中,使用 try-with-resources 语句获取 Jedis 对象,确保 Jedis 对象在使用完后自动释放资源。
- 测试
在 SpringBoot 项目中编写测试类测试 JedisSentinelPool 对象的使用是否正确:
@SpringBootTest
class RedisSentinelApplicationTests {
@Autowired
private RedisService redisService;
@Test
void testRedis() {
String key = 'name';
String value = 'Tom';
redisService.set(key, value);
String result = redisService.get(key);
assertEquals(value, result);
}
}
测试通过后,说明 JedisSentinelPool 对象的创建和使用都正确。
原文地址: https://www.cveoy.top/t/topic/nMQu 著作权归作者所有。请勿转载和采集!