美文网首页SpringBoot开源框架-SpringBoot系列
Springboot+Redis 同数据源动态切换db

Springboot+Redis 同数据源动态切换db

作者: HeloWxl | 来源:发表于2020-06-23 16:24 被阅读0次

    本文参考:(Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
    原文作者:小目标青年

    问题:平常使用的时候,redis的db是写死的,如何去动态的修改呢?

    image.png

    解决办法

    • 新建一个RedisDBChangeUtil.java
    @Component
    public class RedisDBChangeUtil {
        @Autowired
        private StringRedisTemplate redisTemplate;
    
        public void setDataBase(int num) {
            LettuceConnectionFactory connectionFactory = (LettuceConnectionFactory) redisTemplate.getConnectionFactory();
            if (connectionFactory != null && num != connectionFactory.getDatabase()) {
                connectionFactory.setDatabase(num);
                this.redisTemplate.setConnectionFactory(connectionFactory);
                connectionFactory.resetConnection();
            }
        }
    }
    

    需要注意的地方:

    LettuceConnectionFactory 是 在springboot 2.X版本使用,

    但是springboot 版本 spring-boot-starter-data-redis 的版本对这个redis切换db非常不友好!(引用原作者的话👀)

    测试一下:(版本:2.1.3.RELEASE)

    • 如果不是以上的版本的话,切换数据库是没有效果的,数据都会插入到默认的db0中。
    @RestController
    @RequestMapping("/")
    public class RedisStringController {
         @Resource
        private StringRedisTemplate stringRedisTemplate;
    
        @Resource
        private RedisDBChangeUtil redisDBChangeUtil;
    
        @PostMapping("/changeDb")
        public String changeDb(){
    
           //默认的插入
            stringRedisTemplate.opsForValue().set("name","db0");
    
            //插入db1
            redisDBChangeUtil.setDataBase(1);
            stringRedisTemplate.opsForValue().set("name1","db1");
    
            //插入db2
            redisDBChangeUtil.setDataBase(2);
            stringRedisTemplate.opsForValue().set("name2","db2");
    
            return  "ok";
        }
    }
    
    image.png

    DB0

    image.png

    DB1

    image.png

    相关文章

      网友评论

        本文标题:Springboot+Redis 同数据源动态切换db

        本文链接:https://www.haomeiwen.com/subject/evshfktx.html