SpringBoot 集成 Redis 哨兵模式连接池实现
- 引入依赖
首先需要在 pom.xml 文件中引入 SpringBoot 和 redis 的依赖,以及 jedis 和 commons-pool2 的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.9.0</version>
</dependency>
- 配置 Redis
在 application.properties 文件中配置 Redis:
# Redis 连接配置
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.password=
spring.redis.database=0
spring.redis.pool.max-active=8
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.pool.max-wait=-1
spring.redis.timeout=5000
其中:
- spring.redis.sentinel.master:指定 Redis 主节点的名称;
- spring.redis.sentinel.nodes:指定 Redis 哨兵节点的地址;
- spring.redis.password:Redis 认证密码;
- spring.redis.database:Redis 数据库编号;
- spring.redis.pool.max-active:连接池最大连接数;
- spring.redis.pool.max-idle:连接池最大空闲连接数;
- spring.redis.pool.min-idle:连接池最小空闲连接数;
- spring.redis.pool.max-wait:连接池最大等待时间(毫秒);
- spring.redis.timeout:Redis 操作超时时间(毫秒)。
- 创建 Redis 连接池
在 Spring 配置文件中创建 Redis 连接池:
@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;
@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 long maxWait;
@Bean
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(maxActive);
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(minIdle);
poolConfig.setMaxWaitMillis(maxWait);
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setTestWhileIdle(true);
return poolConfig;
}
@Bean
public JedisSentinelPool jedisSentinelPool(JedisPoolConfig jedisPoolConfig) {
Set<String> sentinelSet = new HashSet<>(Arrays.asList(sentinelNodes.split(',')));
return new JedisSentinelPool(masterName, sentinelSet, jedisPoolConfig, password);
}
@Bean
public RedisTemplate<String, Object> redisTemplate(JedisSentinelPool jedisSentinelPool) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(jedisSentinelPool);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}
其中:
- jedisPoolConfig() 方法创建 Jedis 连接池的配置对象;
- jedisSentinelPool() 方法创建 Jedis Sentinel 连接池,并注入 jedisPoolConfig() 方法返回的连接池配置对象;
- redisTemplate() 方法创建 RedisTemplate 对象,并注入 jedisSentinelPool() 方法返回的 Jedis Sentinel 连接池对象,同时设置键和值的序列化器为 StringRedisSerializer 和 GenericJackson2JsonRedisSerializer。
- 使用 RedisTemplate 操作 Redis
在代码中使用 RedisTemplate 对象操作 Redis:
@Autowired
private RedisTemplate<String, Object> redisTemplate;
// 设置键和值
redisTemplate.opsForValue().set('key', 'value');
// 获取值
Object value = redisTemplate.opsForValue().get('key');
// 删除键
redisTemplate.delete('key');
以上代码演示了 RedisTemplate 对象的使用方法,可以根据实际需求进行更多操作。
总结
本文介绍了如何使用 SpringBoot 和 redis 哨兵模式、连接池方式来操作 Redis,其中包括引入依赖、配置 Redis、创建 Redis 连接池和使用 RedisTemplate 对象操作 Redis。通过本文的学习,读者可以了解到如何使用 SpringBoot 进行 Redis 开发,并掌握 redis 哨兵模式、连接池方式的实现方法。
原文地址: https://www.cveoy.top/t/topic/nMFl 著作权归作者所有。请勿转载和采集!