SpringBoot Redis切換數據庫遇到的坑


項目不同業務的redis數據存在不同的庫中,操作數據需要切換redis庫,在網上找了一段代碼,確實可以切換數據庫。但是使用一段時間后發現部分數據存儲的數據庫不正確,排查后發現setDatabase是線程不安全的,並發下會有問題,可能導致數據在不同數據庫中混淆。

代碼如下:

/**
 * 切換redis數據庫
 * @param index 數據庫
 */
public void selectDB(int index){
    LettuceConnectionFactory lettuceConnectionFactory = (LettuceConnectionFactory) redisTemplate.getConnectionFactory();
    lettuceConnectionFactory.setDatabase(index);
    redisTemplate.setConnectionFactory(lettuceConnectionFactory);
    lettuceConnectionFactory.resetConnection();
}

解決方案:
1、加鎖
2、配置實現多個RedisTemplate實例,每個實例負責訪問一個數據庫,這樣也不需要切換數據庫了
3、把所有數據都存在一個數據庫,使用前綴區分不同的業務key


免責聲明!

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



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