第一种实现方式
yml
spring:
redis:
sentinel:
master: mymaster
nodes: 192.168.100.111:26379,192.168.100.112:26379,192.168.100.113:36379
password: 123456
timeout: 5000
database: 2
lettuce:
pool:
max-active: 30
max-wait: 20000
max-idle: 30
min-idle: 10
jedis:
pool:
max-active: 30
max-wait: 20000
max-idle: 30
min-idle: 10
configuation
@Autowired
RedisProperties redisProperties;
@Bean
@Scope(scopeName = "prototype")
public JedisConnectionFactory jedisConnectionFactory() {
RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration();
List<RedisNode> nodes = new ArrayList<>();
for (String node : redisProperties.getSentinel().getNodes()) {
try {
String[] parts = StringUtils.split(node, ":");
Assert.state(parts.length == 2, "Must be defined as 'host:port'");
nodes.add(new RedisNode(parts[0], Integer.parseInt(parts[1])));
}
catch (RuntimeException ex) {
throw new IllegalStateException("Invalid redis sentinel property '" + node + "'", ex);
}
}
redisSentinelConfiguration.setSentinels(nodes);
redisSentinelConfiguration.setMaster(redisProperties.getSentinel().getMaster());
redisSentinelConfiguration.setDatabase(redisProperties.getDatabase());
redisSentinelConfiguration.setPassword(redisProperties.getPassword());
redisSentinelConfiguration.setSentinelPassword(redisProperties.getPassword());
return new JedisConnectionFactory(redisSentinelConfiguration);
}
@Bean
public RedisTemplate<Object, Object> redisTemplate() {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
JedisConnectionFactory jedisConnectionFactory = jedisConnectionFactory();
redisTemplate.setConnectionFactory(jedisConnectionFactory);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setValueSerializer(stringRedisSerializer);
redisTemplate.setHashKeySerializer(stringRedisSerializer);
redisTemplate.setHashValueSerializer(stringRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
@Bean("redisTemplateOfDb0")
public RedisTemplate<Object, Object> redisTemplateOfDb0() {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
JedisConnectionFactory jedisConnectionFactory = jedisConnectionFactory();
jedisConnectionFactory.setDatabase(0);
redisTemplate.setConnectionFactory(jedisConnectionFactory);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setValueSerializer(stringRedisSerializer);
redisTemplate.setHashKeySerializer(stringRedisSerializer);
redisTemplate.setHashValueSerializer(stringRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
- 通过jedisConnectionFactory指定数据库的方法在1.x版本已过时,有无替代?
- 这样写在分布式环境中是否有性能问题?
第二种实现方式