SpringBoot集成Lettuce 自动刷新时间 spring.redis.lettuce.cluster.refresh.period60 开启自适应刷新 spring.redis.lettuce.cluster.refresh.adaptivetrue spring.redis.timeout60 i. Redis配置类RedisConfiguration,请务必开启集群自动刷新拓扑配置。 @Bean public LettuceConnectionFactory lettuceConnectionFactory() { String[] nodes clusterNodes.split(","); List listNodes new ArrayList(); for (String node : nodes) { String[] ipAndPort node.split(":"); RedisNode redisNode new RedisNode(ipAndPort[0], Integer.parseInt(ipAndPort[1])); listNodes.add(redisNode); } RedisClusterConfiguration redisClusterConfiguration new RedisClusterConfiguration(); redisClusterConfiguration.setClusterNodes(listNodes); redisClusterConfiguration.setPassword(password); redisClusterConfiguration.setMaxRedirects(maxRedirects); // 配置集群自动刷新拓扑 ClusterTopologyRefreshOptions topologyRefreshOptions ClusterTopologyRefreshOptions.builder() .enablePeriodicRefresh(Duration.ofSeconds(period)) //按照周期刷新拓扑 .enableAllAdaptiveRefreshTriggers() //根据事件刷新拓扑 .build(); ClusterClientOptions clusterClientOptions ClusterClientOptions.builder() //redis命令超时时间,超时后才会使用新的拓扑信息重新建立连接 .timeoutOptions(TimeoutOptions.enabled(Duration.ofSeconds(period))) .topologyRefreshOptions(topologyRefreshOptions) .build(); LettuceClientConfiguration clientConfig LettucePoolingClientConfiguration.builder() .commandTimeout(Duration.ofSeconds(timeout)) .readFrom(ReadFrom.REPLICAPREFERRED) // 优先从副本读取 .clientOptions(clusterClientOptions) .build(); LettuceConnectionFactory factory new LettuceConnectionFactory(redisClusterConfiguration, clientConfig); return factory; } @Bean public RedisTemplate redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { RedisTemplate template new RedisTemplate<>(); template.setConnectionFactory(lettuceConnectionFactory); //使用Jackson2JsonRedisSerializer替换默认的JdkSerializationRedisSerializer来序列化和反序列化redis的value值 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper mapper new ObjectMapper(); mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NONFINAL, JsonTypeInfo.As.PROPERTY); jackson2JsonRedisSerializer.setObjectMapper(mapper); StringRedisSerializer stringRedisSerializer new StringRedisSerializer(); //key采用String的序列化方式 template.setKeySerializer(stringRedisSerializer); // hash的key也采用String的序列化方式 template.setHashKeySerializer(stringRedisSerializer); // value序列化方式采用jackson template.setValueSerializer(jackson2JsonRedisSerializer); // hash的value序列化方式采用jackson template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } springboot+lettuce连接池方式连接Redis Cluster集群代码示例。 J . 在application.properties配置文件中加上Redis相关配置。 spring.redis.cluster.nodeshost:port spring.redis.cluster.maxredirects3 spring.redis.passwordpwd spring.redis.lettuce.cluster.refresh.period60 spring.redis.lettuce.cluster.refresh.adaptivetrue