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"; } }

  

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM