[英]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.