SpringBoot开源框架-SpringBoot系列

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

2020-06-23  本文已影响0人  HeloWxl

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

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

image.png

解决办法

@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)

@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
上一篇下一篇

猜你喜欢

热点阅读