主要是工作总结,集成前置条件是搭建一个简单能启动的springboot微服务和本地启动集群节点,注:集群环境搭建可看上一篇,简单的springboot微服务搭建这方面有很多教程。
- 首先新建一个RedisProperties配置文件,用来读取配置文件里面集群的节点和密码,代码和配置文件如下:
@Configuration
@ConfigurationProperties(prefix = "spring.redis.cluster")
@ConditionalOnProperty(name = {
"spring.redis.cluster.nodes"})
public class RedisProperties {
private String nodes;
private String password;
private int maxRedirects;
public String getNodes() {
return nodes;
}
public void setNodes(String nodes) {
this.nodes = nodes;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getMaxRedirects() {
return maxRedirects;
}
public void setMaxRedirects(int maxRedirects) {
this.maxRedirects = maxRedirects;
}
}
spring.redis.cluster.nodes=127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384,127.0.0.1:6385
spring.redis.cluster.password=
spring.redis.cluster.max-redirects=12
- 新建一个config配置类,重新注入一个RedisConnectionFactory和RedisTemplate的bean,不使用默认自动注入的,代码如下:
/**
* redis配置类
*/
@Configuration
public class RedisConfig {
//单节点使用自动注入的
/*@Autowired
private LettuceConnectionFactory lettuceConnectionFactory;*/
@Autowired
private RedisConnectionFactory lettuceConnectionFactory;
@Resource
private RedisProperties redisProperties;
//配置集群新增注入这个工厂bean
@Bean
public RedisConnectionFactory redisConnectionFactory() {
JedisConnectionFactory factory = null;
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(Arrays.asList(redisProperties.getNodes().split(",")));
redisClusterConfiguration.setMaxRedirects(redisProperties.getMaxRedirects());
redisClusterConfiguration.setPassword(RedisPassword.of(redisProperties.getPassword()));
factory = new JedisConnectionFactory(redisClusterConfiguration, jedisPoolConfig);
return factory;
}
@Bean
public RedisTemplate redisTemplate(){
RedisTemplate template = new RedisTemplate();
//开启事务
template.setEnableTransactionSupport(true);
// lettuceConnectionFactory.setShareNativeConnection(false);
template.setConnectionFactory(lettuceConnectionFactory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//配置键值json序列化
template.setKeySerializer(stringRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer)