使用redis sentinel时如何为redis设置数据库编号
How to set database number for redis, when using redis sentinel
我有一个redis集群1个master,1个slave和3个redis sentinel和springboot应用通过sentinel连接到redis
应用程序能够通过 redis sentinel 与 redis 对话。正如我们所知,默认情况下 redis 实例有 16 个数据库,编号从 0 - 15,默认连接到 db0,但在我的项目中我需要连接到 db4,因为还有其他项目正在使用 0、1、2 等 db4分配到我的项目。
Jedisconnection 工厂正在项目中使用,我尝试从 redis 属性设置数据库看看下面的代码
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;
}
}
我有一个redis集群1个master,1个slave和3个redis sentinel和springboot应用通过sentinel连接到redis
应用程序能够通过 redis sentinel 与 redis 对话。正如我们所知,默认情况下 redis 实例有 16 个数据库,编号从 0 - 15,默认连接到 db0,但在我的项目中我需要连接到 db4,因为还有其他项目正在使用 0、1、2 等 db4分配到我的项目。
Jedisconnection 工厂正在项目中使用,我尝试从 redis 属性设置数据库看看下面的代码
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;
}
}