您当前的位置: 首页 >  redis

梁云亮

暂无认证

  • 2浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Springboot2.x整合同时操作多个Redis库

梁云亮 发布时间:2020-11-04 08:13:17 ,浏览量:2

原理

直接通过配置注入多个RedisTemplate,需要用到哪个库时直接使用对应的RedisTemplate即可。

第一步:创建项目指定Maven依赖:

    org.projectlombok
    lombok
    1.18.10



    com.fasterxml.jackson.core
    jackson-core
    2.10.1


    com.fasterxml.jackson.core
    jackson-databind
    2.10.1


    com.fasterxml.jackson.core
    jackson-annotations
    2.10.1



    com.fasterxml.jackson.datatype
    jackson-datatype-jsr310



    org.springframework.boot
    spring-boot-starter


    org.springframework.boot
    spring-boot-starter-test
    test
    
        
            org.junit.vintage
            junit-vintage-engine
        
    




    org.springframework.boot
    spring-boot-starter-data-redis



    org.apache.commons
    commons-pool2

第二步:application.yml
redis:
    database:
        db1: 5
        db2: 7
    host: 127.0.0.1
    port: 6379
    password: 123456
    timeout: 1000
    pool:
        max-active: 100
        max-idle: 3
        min-idle: 0
        max-wait: -1
第三步:Redis配置文件
@Configuration
public class RedisConfig {
    @Value("${redis.database.db1}")
    private int db1;

    @Value("${redis.database.db2}")
    private int db2;

    @Value("${redis.host}")
    private String host;

    @Value("${redis.port}")
    private int port;

    @Value("${redis.password}")
    private String password;

    @Value("${redis.timeout}")
    private int timeout;

    @Value("${redis.pool.max-active}")
    private int maxActive;

    @Value("${redis.pool.max-idle}")
    private int maxIdle;

    @Value("${redis.pool.min-idle}")
    private int minIdle;

    @Value("${redis.pool.max-wait}")
    private int maxWait;

    @Bean
    public GenericObjectPoolConfig getPoolConfig(){
        // 配置redis连接池
        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        poolConfig.setMaxTotal(maxActive);
        poolConfig.setMaxIdle(maxIdle);
        poolConfig.setMinIdle(minIdle);
        poolConfig.setMaxWaitMillis(maxWait);
        return poolConfig;
    }

    @Bean(name = "redisTemplate1")
    public StringRedisTemplate getRedisTemplate1(){
        return getStringRedisTemplate(db1);
    }

    @Bean(name = "redisTemplate2")
    public StringRedisTemplate getRedisTemplate2(){
        // 构建工厂对象
        return getStringRedisTemplate(db2);
    }

    private StringRedisTemplate getStringRedisTemplate(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);
        // 设置使用的redis数据库
        factory.setDatabase(database);
        // 重新初始化工厂
        factory.afterPropertiesSet();
        return new StringRedisTemplate(factory);
    }
}
第四步:测试代码
@SpringBootTest
public class DemoTest {
    @Resource(name = "redisTemplate1")
    private StringRedisTemplate redisTemplate1;

    @Resource(name = "redisTemplate2")
    private StringRedisTemplate redisTemplate2;

    @Test
    public void fun1() {
        // 向redis中存值
        redisTemplate1.opsForValue().set("name", "zhangsan");
        redisTemplate2.opsForValue().set("name", "lisi");
    }

    @Test
    public void fun2() {
        // 向redis中存值同时指定过期时间
        redisTemplate1.opsForValue().set("name", "zhangsan");
        redisTemplate1.expire("name",3, TimeUnit.MINUTES);
        redisTemplate2.opsForValue().set("name", "lisi");
        redisTemplate2.expire("name",3, TimeUnit.MINUTES);
    }
}
关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0454s