1、配置
spring:
redis:
host: 10.252.176.77
port: 6379
password: Wxf5&qR%t
timeout: 3000
database:
db1: 10
db2: 12
pool:
max-active: 100
max-wait: 2000
max-idle: 70
min-idle: 5
<spring-boot.version>2.4.7</spring-boot.version>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<version>${spring-boot.version}</version>
2、配置类
@Value("${spring.redis.database.db1}")
private int db1;
@Value("${spring.redis.database.db2}")
private int db2;
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.pool.max-active}")
private int maxActive;
@Value("${spring.redis.pool.min-idle}")
private int minIdle;
@Value("${spring.redis.pool.max-wait}")
private long maxWait;
@Bean
public GenericObjectPoolConfig getPoolConfig(){
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMaxTotal(maxActive);
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(minIdle);
poolConfig.setMaxWaitMillis(maxWait);
return poolConfig;
}
private RedisConnectionFactory getFactory(int database) {
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
config.setHostName(host);
config.setPort(port);
config.setPassword(RedisPassword.of(password));
LettucePoolingClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
.commandTimeout(Duration.ofSeconds(timeout))
.poolConfig(getPoolConfig())
.build();
LettuceConnectionFactory factory = new LettuceConnectionFactory(config, clientConfig);
factory.setDatabase(database);
factory.afterPropertiesSet();
return factory;
}
@NotNull
private RedisTemplate<String, Object> getObjectRedisTemplate() {
StringRedisSerializer keySerializer = new StringRedisSerializer();
RedisSerializer<Object> valueSerializer = new GenericFastJsonRedisSerializer();
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(keySerializer);
redisTemplate.setValueSerializer(valueSerializer);
redisTemplate.setHashKeySerializer(keySerializer);
redisTemplate.setHashValueSerializer(valueSerializer);
return redisTemplate;
}
@Bean("redisTemplate")
@Primary
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = getObjectRedisTemplate();
redisTemplate.setConnectionFactory(this.getFactory(db1));
return redisTemplate;
}
@Bean("stringRedisTemplate")
@Primary
public StringRedisTemplate stringRedisTemplate() {
RedisConnectionFactory factory = getFactory(db1);
return new StringRedisTemplate(factory);
}
@Bean("stringRedisTemplate2")
public StringRedisTemplate getRedisTemplate2(){
RedisConnectionFactory factory = getFactory(db2);
return new StringRedisTemplate(factory);
}
@Bean("redisTemplate2")
public RedisTemplate<String, Object> redisTemplate2() {
RedisTemplate<String, Object> redisTemplate = getObjectRedisTemplate();
redisTemplate.setConnectionFactory(this.getFactory(db2));
return redisTemplate;
}
3、使用
- 注意:需要指定bean,两种方式@Resource和@Autowired、@Qualifier组合
@Resource(name = "redisTemplate2")
private RedisTemplate redisTemplate;
private ExecutorOnlineInfoBO getOnlineInfo() {
Set keys = redisTemplate.keys("security-executor::*");
ExecutorOnlineInfoBO executorOnlineInfoBO = new ExecutorOnlineInfoBO();
int count = 0;
int size = keys.size() | 0;
if (keys != null && size > 0) {
List list = Objects.requireNonNull(redisTemplate.opsForValue().multiGet(keys));
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Object tmp = iterator.next();
Object executorInfo = ((JSONObject) tmp).get("executorInfo");
if (ObjectUtils.isNotEmpty(executorInfo)) {
Object onlineType = ((JSONObject) executorInfo).get("onlineType");
if (ObjectUtils.isNotEmpty(onlineType)) {
count++;
}
}
}
}
executorOnlineInfoBO.setOnlineNum(count);
executorOnlineInfoBO.setLeaveNum(size - count);
executorOnlineInfoBO);
return executorOnlineInfoBO;
}