簡體   English   中英

使用 redis 哨兵時如何為 redis 設置數據庫編號

[英]How to set database number for redis, when using redis sentinel

我有一個 redis 集群,由1 個主設備、1 個從設備和 3 個 redis 哨兵和 springboot 應用程序通過哨兵連接到 redis。

應用程序能夠通過 redis 哨兵與 redis 對話。 我們知道默認情況下 redis 實例有 16 個數據庫,編號從 0 到 15,默認連接到 db0,但在我的項目中我需要連接到 db4,因為還有其他項目正在使用 0、1、2 等 db4分配給我的項目。

Jedisconnection工廠正在項目中使用,我嘗試從redis屬性設置db看看下面的代碼

spring.redis.sentinel.master=mymaster
spring.redis.password=${REDIS_PASSWORD}
spring.redis.sentinel.nodes=localhost:26379,localhost:26380,localhost:26381
spring.redis.database=4
public class RedisConfig {

    @Autowired
    private RedisProperties redisProperties;

    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration();
        redisSentinelConfiguration.setDatabase(redisProperties.getDatabase());
        redisSentinelConfiguration.master(redisProperties.getSentinel().getMaster());
        redisSentinelConfiguration.setPassword(redisProperties.getPassword());
        for(String node : redisProperties.getSentinel().getNodes()) {
            String[] props = node.split(":");
            redisSentinelConfiguration.sentinel(props[0], Integer.parseInt(props[1]));
        }
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisSentinelConfiguration);
        jedisConnectionFactory.setDatabase(redisProperties.getDatabase());
        return jedisConnectionFactory;
    }

    @Bean
    public StringRedisTemplate stringRedisTemplate() {
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(jedisConnectionFactory());
        return stringRedisTemplate;
    }
}

即使在這樣做之后,這里創建的連接也是使用 db0。

此外,jedisConnectionFactory 的 setDatabase() 方法已被棄用。

如果我的方法是正確的,那么請幫助我以正確的方式執行此操作,那么我什么時候會犯錯誤。

注意:如果沒有 redis 哨兵配置,我可以通過在 jedisConeectionFactory 中設置數據庫來實現與特定 db4 的連接。

我可以通過擁有 spring 屬性來解決這個問題:

spring.redis.sentinel.master=mymaster
spring.redis.password=${REDIS_PASSWORD}
spring.redis.sentinel.nodes=localhost:26379,localhost:26380,localhost:26381
spring.redis.database=4

和下面的配置

public class RedisConfig {
    
    @Autowired
    private RedisProperties redisProperties;

    public RedisConfig() {
    }

    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration();
        redisSentinelConfiguration.master(this.redisProperties.getSentinel().getMaster());
        redisSentinelConfiguration.setPassword(this.redisProperties.getPassword());
        Iterator var2 = this.redisProperties.getSentinel().getNodes().iterator();

        while(var2.hasNext()) {
            String node = (String)var2.next();
            String[] props = node.split(":");
            redisSentinelConfiguration.sentinel(props[0], Integer.parseInt(props[1]));
        }

        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisSentinelConfiguration);
        jedisConnectionFactory.setDatabase(this.redisProperties.getDatabase());
        return jedisConnectionFactory;
    }

    @Bean
    public StringRedisTemplate stringRedisTemplate() {
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(this.jedisConnectionFactory());
        return stringRedisTemplate;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM