SpringBoot如何切換Redis默認庫

一些閒扯的話

咱們清楚,Redis 儘管提供了 16 個索引庫,可是每一個數據庫之間是隔離互不共享的,客戶端默認鏈接使用的是 0 號數據庫 。css

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

因此,本文切換數據庫是基於單機版 Redis 的。面試

爲何 Redis 要有這麼多的數據庫,以及爲啥要切換?redis

我的理解 ,Redis 之因此分這麼多個數據庫,也是爲了區分業務,不一樣的業務存放在不一樣的庫,可是一個 Redis,通常是給一個項目用,項目內的不一樣業務,單獨用一個庫,這樣不會相互有數據交叉。好比:用戶信息放到 0 庫,商品數據放在 1 庫等等。spring

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

方式一:配置文件方式

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

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

方式二:JedisConnectionFactory

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

咱們知道 Java 爲咱們提供了兩種 Redis 實現類:RedisTemplateStringRedisTemplate工具

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

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 使用的庫。

相關文章
相關標籤/搜索