zoukankan      html  css  js  c++  java
  • SpringBoot-技术专区-Redis同数据源动态切换db

    问题:

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

     

    解决办法

    • 新建一个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"; } }

      

     
  • 相关阅读:
    rqnoj71 拔河比赛
    NOI2002 洛谷 P1196 银河英雄传说
    sdibt 1244 烦人的幻灯片
    POJ 1273 Drainage Ditches -dinic
    NOIP2005提高组 过河
    OpenJudge 7627 鸡蛋的硬度
    Openjudge 8782 乘积最大
    OpenJudge 7624 山区建小学
    UVa 1328 Period
    UVa 11384 Help is needed for Dexter
  • 原文地址:https://www.cnblogs.com/liboware/p/13224348.html
Copyright © 2011-2022 走看看