【问题标题】:How to set database number for redis, when using redis sentinel使用redis sentinel时如何为redis设置数据库编号
【发布时间】:2020-07-05 12:20:27
【问题描述】:

我有一个1个master、1个slave和3个redis sentinel的redis集群和springboot应用通过sentinel连接到redis。

应用程序可以通过 redis sentinel 与 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 sentinel 配置,我可以通过在 jedisConeectionFactory 中设置数据库来实现与特定 db4 的连接。

【问题讨论】:

    标签: java spring-boot redis redis-sentinel


    【解决方案1】:

    我可以通过拥有弹簧属性来解决这个问题:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多