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