SpringBoot如何切換Redis默認庫


一些閑扯的話

我們清楚,Redis 盡管提供了 16 個索引庫,但是每個數據庫之間是隔離互不共享的,客戶端默認連接使用的是 0 號數據庫 。

注意:上方情況是基於單機 Redis 的,在集群模式下是沒有多數據庫概念的,只有一個 db0,不支持多 db

所以,本文切換數據庫是基於單機版 Redis 的。

為什么 Redis 要有這么多的數據庫,以及為啥要切換?

個人理解 ,Redis 之所以分這么多個數據庫,也是為了區分業務,不同的業務存放在不同的庫,但是一個 Redis,一般是給一個項目用,項目內的不同業務,單獨用一個庫,這樣不會相互有數據交叉。比如:用戶信息放到 0 庫,商品數據放在 1 庫等等。

今天整理這篇文章是前段時間面試遇到了,然后整理了出來,只是個思路,未提供動態切換的工具類,好了廢話不多說了,進入正題吧。

方式一:配置文件方式

springboot的配置文件中提供了指定使用數據庫的屬性字段。

1、application.properties
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=1234
2、application.yml
spring
  redis:
    host: 127.0.0.1
    port: 6379
    password: 1234
    database: 0

方式二:JedisConnectionFactory

JedisConnectionFactory 提供了 setDatabase() 方法來供我們指定使用的數據庫。

我們知道 Java 為我們提供了兩種 Redis 實現類:RedisTemplateStringRedisTemplate

本文以 StringRedisTemplate 為例,進行 Redisdb 切換。

SpringBoot 1.X之前的版本
JedisConnectionFactory jedisConnectionFactory = (JedisConnectionFactory) stringRedisTemplate.getConnectionFactory();
 jedisConnectionFactory.setDatabase(切換到指定的db上);
stringRedisTemplate.setConnectionFactory(jedisConnectionFactory);
SpringBoot 2.X之后的版本
LettuceConnectionFactory jedisConnectionFactory = (LettuceConnectionFactory) redisTemplate.getConnectionFactory();
jedisConnectionFactory.setDatabase(切換到指定的db上);
redisTemplate.setConnectionFactory(jedisConnectionFactory);
jedisConnectionFactory.resetConnection();
簡單使用:
 @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();
        }
}

面試:你們是如何切換Redis數據庫的?

一種參考回答,JedisConnectionFactory 提供了 setDatabase() 方法,可以通過該方法改變 Redis 使用的庫。

 


免責聲明!

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



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