jedisCluster的源码分析主要包括两部分,一个是集群的初始化,一个是集群的访问。
集群初始化分析过程
1、调用构造函数初始化

2、创建连接redis集群对象

3、继续调用构造函数初始化

4、初始化slot和node的映射关系,也就是具体哪个slot放在那个node上

5、调用函数初始化slot和node关系

6、通过cluster slot命令返回主从关系并解析结果
192.168.0.103:6379> CLUSTER slots
1) 1) (integer) 5461 ---> start slot
2) (integer) 10922 --> end slot
3) 1) "192.168.0.103" --> master ip
2) (integer) 6380 --> master port
3) "84e20cc2619b5dbc811e5974f235b1ee365c0926"
4) 1) "192.168.0.103" --> slave ip
2) (integer) 6383 --> slave port
3) "b76596f357c000f3878f0e86adeb2f1a05128879"

访问redis数据过程分析
1、get入口函数

2、通过key的CRC计算得到slot从而得到connection,如果获取异常失败会重现更新slot和对应的connection信息



3、获取返回结果


之前以为连接失败后就没法获取数据了,现在发现在获取连接失败后其实是有重算机制的