先说结论,Spring Boot是不能直接通过application配置来实现主从Redis的配置的。Spring Boot支持的cluster是原始的使用槽的集群模式,而不是常用的主从集群,因此最好自己来搭建Redis的主从集群模式。
需要我们通过自己定义的方式来实现。
这里我们用docker来搭建redis集群,详细的docker-file如下:
version: "2.0"
services:
master:
image: redis
restart: always
container_name: master
ports:
- "6379:6379"
slave1:
image: redis
command: redis-server --slaveof master 6379
container_name: slave1
depends_on:
- master
ports:
- "6380:6379"
links:
- master:master
slave2:
image: redis
command: redis-server --slaveof master 6379
container_name: slave2
depends_on:
- master
ports:
- "6381:6379"
links:
- master:master
这里我们指定了一个master和2个slave,实际只需要使用一个slave即可
由于Redis操作的大部分是String
类型的,因此我们可以直接使用Spring中的StringRedisTemplate
这个类进行使用。
而这个类在Spring源码中的默认注入方法为
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({
LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
// 只有当没有注入时才会使用这个类
@ConditionalOnMissingBean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
StringRedisTemplate template =