连接简直超简单,直接application.properties配置文件中配置如下内容,主要是配置spring.redis.cluster.nodes的值为集群各个节点的值



spring.redis.pool.max-active=40
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=2
spring.redis.pool.max-wait=5000
spring.redis.timeout=5000
spring.redis.cluster.nodes=192.168.217.111:6371,192.168.217.112:6372,192.168.217.113:6373,192.168.217.111:6374,192.168.217.112:6375,192.168.217.113:6376



然后我上篇文档中使用RedisTemplate去调用,还是这么去调用,测试如下:



第一次调用,从数据库获取数据,并且缓存到redis集群中,如下图:



redis集群连接不上 redis集群如何连接_redis集群连接不上




再次刷新,redis中有数据了,因此不从数据库中获取了,直接从缓存拿出如下图:



redis集群连接不上 redis集群如何连接_数据库_02




这里强调一下:代码中用RedisTemplate去set值,就可以通过RedisTemplate的get去把值取出来,但是如果登到后台的redis-cli里面去,并不能用get key的方法获取到值,为什么?



因为序列化的方式变了,key值有变化,用keys可以看到原先的key前面拼接了一串内容,这样操作不够直接,为什么会有这种现象呢?因为和他的序列化有关系,RedisTemplate通过代码连接的时候,默认的序列化方式使用的是jdk的序列化方式,和redis本身的序列化方式不一样,所以会导致该现象,不能说没问题,只是我们后端get查看数据的时候比较麻烦,解决方法就是直接设置RedisTemplate的序列化方式,也就是新增Config配置项配置采用哪种方式,如下:



@Configuration
public class RedisConfig {
@Bean
    public RedisTemplate , Object> redisTemplate(RedisConnectionFactory connectionFactory) {

 RedisTemplate , Object> template = new RedisTemplate<>();
 template.setConnectionFactory(connectionFactory);
 // redis的value值使用Jackson2JsonRedisSerializer来序列化和反序列化
 Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
 ObjectMapper mapper = new ObjectMapper();
 mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
 mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
 serializer.setObjectMapper(mapper);
 template.setValueSerializer(serializer);
 // redis的key值使用StringRedisSerializer来序列化和反序列化
 template.setKeySerializer(new StringRedisSerializer());
 template.afterPropertiesSet();
 return template;
 }

}





这样配置之后,我们再次测试,第一次访问如下:



redis集群连接不上 redis集群如何连接_java_03




后端用redis客户端查看keys, 发现keys前面再也不加其他东西了,如图:



redis集群连接不上 redis集群如何连接_redis_04




再次访问页面,数据从Redis集群中获取到:



redis集群连接不上 redis集群如何连接_redis_05




此时,让第三个Redis服务器下电(意味着同时有俩个服务器故障),但是页面依旧可以从redis中正确的获取数据,也就是实现了高可用。



完!!!