SpringBoot + Redis 哨兵模式: 使用 JedisSentinelPool 操作数据
以下是使用 SpringBoot + Redis 哨兵模式和 JedisSentinelPool 操作数据的示例代码:
- 添加 Maven 依赖
在 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>3.5.2</version>
</dependency>
- 添加 Redis 配置
在 application.yml 或 application.properties 文件中添加 Redis 配置:
spring:
redis:
sentinel:
master: 'mymaster' # Redis 哨兵模式的主节点名称
nodes: # Redis 哨兵模式的节点列表
- redis://127.0.0.1:26379
- redis://127.0.0.1:26380
- redis://127.0.0.1:26381
password: '123456' # Redis 密码
pool:
max-active: 8 # 连接池最大连接数
max-idle: 8 # 连接池最大空闲连接数
min-idle: 0 # 连接池最小空闲连接数
max-wait: -1ms # 连接池最大等待时间
- 创建 Redis 配置类
创建一个 RedisConfig 类,注入 Redis 连接池和 RedisTemplate:
@Configuration
public class RedisConfig {
@Value("${spring.redis.sentinel.master}")
private String masterName;
@Value("${spring.redis.sentinel.nodes}")
private String sentinelNodes;
@Value("${spring.redis.sentinel.password}")
private String password;
@Value("${spring.redis.pool.max-active}")
private int maxActive;
@Value("${spring.redis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.pool.min-idle}")
private int minIdle;
@Value("${spring.redis.pool.max-wait}")
private String maxWait;
@Bean
public JedisSentinelPool jedisSentinelPool() {
Set<String> sentinelSet = new HashSet<>(Arrays.asList(sentinelNodes.split(",")));
return new JedisSentinelPool(masterName, sentinelSet, password, new GenericObjectPoolConfig());
}
@Bean
public RedisTemplate<String, Object> redisTemplate(JedisConnectionFactory jedisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(jedisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
@Bean
public JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory(jedisSentinelPool(), new JedisClientConfigurationBuilder()
.usePooling()
.poolConfig(new GenericObjectPoolConfig())
.build());
}
}
- 编写 Redis 操作类
创建一个 RedisService 类,注入 RedisTemplate 并编写操作 Redis 的方法:
@Service
public class RedisService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void set(String key, Object value) {
redisTemplate.opsForValue().set(key, value);
}
public Object get(String key) {
return redisTemplate.opsForValue().get(key);
}
public void delete(String key) {
redisTemplate.delete(key);
}
}
- 测试 Redis 操作
创建一个测试类,注入 RedisService 并调用 Redis 操作方法:
@SpringBootTest
class RedisServiceTest {
@Autowired
private RedisService redisService;
@Test
void setAndGet() {
redisService.set("name", "Tom");
Object value = redisService.get("name");
Assert.assertEquals("Tom", value.toString());
}
@Test
void delete() {
redisService.delete("name");
Object value = redisService.get("name");
Assert.assertNull(value);
}
}
这样就完成了使用 SpringBoot + Redis 哨兵模式和 JedisSentinelPool 操作数据的示例。
注意:
- 请根据实际情况替换 Redis 配置中的参数,例如:master 节点名称、哨兵节点列表和 Redis 密码。
- 确保 Redis 哨兵模式已正确配置,并且哨兵节点可以正常连接到主节点。
- 如果需要使用其他 Redis 数据结构,例如:列表、集合或有序集合,请参考 RedisTemplate 的相关 API 文档。
希望本教程能够帮助您更好地理解使用 SpringBoot、Redis 哨兵模式和 JedisSentinelPool 进行 Redis 操作。
原文地址: https://www.cveoy.top/t/topic/nMFz 著作权归作者所有。请勿转载和采集!