Springboot2.2 Redis多个实例简单的手动配置
在一个简单的SpringBoot项目里面,为项目配置redis数据库,无论是作为Cache数据库还是用于业务逻辑中实现排序或者其它用途,配置方式都极其简便,只需加入maven依赖和在配置文件指定host即完成配置。但是在需要按业务隔离这些key的时候,单个RedisTemplate实例就无法满足需求了,这时我们需要注入多个RedisTemplate;我个人比较倾向于不干涉spring原有的auto config,在不与原有stringRedisTemplate实例冲突的情况下注入为某个业务准备的redisTemplate。
1)引入依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2)创造redisTemplate
@Configuration
public class RedisConfig {
private GenericObjectPoolConfig redisPool() {
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
config.setMinIdle(1);
config.setMaxIdle(20);
config.setMaxWaitMillis(6000);
config.setMaxTotal(30);
return config;
} //指定读取的配置
@Bean
@ConfigurationProperties(prefix = "spring.redis.sys-config")
public RedisStandaloneConfiguration sysConfigRedisConfiguration() {
return new RedisStandaloneConfiguration();
}
/**
* 使用特定的配置创建自定义的RedisTemplate实例,
* 其中SysConfigRedisTemplate是一个直接继承RedisTemplate的子类,
* 没有额外的属性和方法,只是为了在使用的时候更方便地注入,
* 并且不与现有的进行冲突
* @param sysConfigRedisConfiguration
* @return
*/
@Bean
public SysConfigRedisTemplate sysConfigRedisTemplate(RedisStandaloneConfiguration sysConfigRedisConfiguration) {
GenericObjectPoolConfig poolConfig = redisPool();
LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder().poolConfig(poolConfig).commandTimeout(Duration.ofMillis(poolConfig.getMaxWaitMillis())).build();
SysConfigRedisTemplate template = new SysConfigRedisTemplate();
LettuceConnectionFactory factory = new LettuceConnectionFactory(sysConfigRedisConfiguration, clientConfiguration);
factory.afterPropertiesSet();
template.setConnectionFactory(factory);
return template;
}
//更多redisTemplate...
}
public class SysConfigRedisTemplate extends StringRedisTemplate { }
以此类推,还能够增加其它的业务RedisTemplate并且松耦合
参考博客:https://blog.csdn.net/chenypgg/article/details/85698209