您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

SpringBoot-技术专区-Redis同数据源动态切换db

bubuko 2022/1/25 19:37:14 java 字数 2711 阅读 1063 来源 http://www.bubuko.com/infolist-5-1.html

问题: 平常使用的时候,redis的db是写死的,如何去动态的修改呢? 解决办法 新建一个RedisDBChangeUtil.java @Component public class RedisDBChangeUtil { @Autowired private StringRedisTemplate ...

问题:

平常使用的时候,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"; } }

  技术分享图片

 

 

 

SpringBoot-技术专区-Redis同数据源动态切换db

原文:https://www.cnblogs.com/liboware/p/13224348.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶