springboot+redis 切换redis库操作简洁明了

springboot整合redis后默认使用的是redist的db0号库,在学习redis时对redis库进行了很多数据操作,今天使用redis开始正式写项目的时候我想换一个库,但是不知道操作上网一搜发现配置多的要死,研究了一下发现只需要几行代码就可以实现

  1. 别人的完整版
    ​
    package com.qianhe.utlis.RedisDB;
    
    import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
    import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
    import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
    import org.springframework.data.redis.core.StringRedisTemplate;
    
    import java.time.Duration;
    
    @Configuration
    public class RedisConfig {
    
        @Value("${redis.database.db0}")
        private int db0;
    
        @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;
        }
    
        @Primary
        @Bean(name = "redisTemplate0")
        public StringRedisTemplate getRedisTemplate0(){
            return getStringRedisTemplate(db0);
        }
    
        @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);
        }
    
    }
    ————————————————
    版权声明:本文为CSDN博主「白小白的小白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_42874635/article/details/118157740
    
    ​

    研究了一下发现大部分都是没必要的,因为springboot整合redis后会通过yml自动配置,我们只需要配置一下具体数据库就行了

  2. 精简版代码

​
package com.hmdp.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

import javax.annotation.Resource;


/**
 * @Author: Thorns
 * @Data:2023/5/1617:19
 * @PackageName:top.thorns.redislearn.springdataredis
 * @ClassName: RedisTemplateConfig
 * @Description:
 **/
@Configuration
public class RedisConfig {

    @Resource
    LettuceConnectionFactory factory;


    /**
     * 配置redis数据库,默认为db0
     * @return
     */
    @Bean
    public StringRedisTemplate getStringRedisTemplate() {
        // 设置使用的redis数据库
        factory.setDatabase(1);
        // 重新初始化工厂
        factory.afterPropertiesSet();
        return new StringRedisTemplate(factory);
    }

​

只需要依赖一下Lettuce连接工厂,然后设置工厂数据源就好了,至于说Lettuce连接工厂的上层依赖配置,springboot会通过读取配置文件为我们自动配置。

我这里是偷懒写死了连接1号库,有需求的可以对上述代码进行一下封装动态传值切换redis库。

菜鸡一个可能写的有些地方不正确欢迎大佬指正,但是代码经过实验确实可以实现切换redis库

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值