使用redis sentinel时如何设置redis的数据库号

hpxqektj  于 2021-06-10  发布在  Redis
关注(0)|答案(1)|浏览(462)

我有一个redis集群,由1个主、1个从和3个redis sentinel组成,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的连接。

72qzrwbm

72qzrwbm1#

我可以通过使用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;
    }
}

相关问题