面向小白的SpringBoot的Redis的cluster的实现

这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战

昨天讲了JedisPool的实现,今天我们来看看JedisCluster的实现,我们知道Redis会自动帮我们做一个数据分片,一个节点会分成16384个数据片,可以帮我们做一些key的分布和映射。这样,比如某些节点宕机了,别的节点的HashSlot是不会受到影响的,可以保证一定情况下的可用性,那让我们来了解下吧。

JedisCluster

首先,我们看构造方法,这个类给我们提供了很多重载的构造方法,我们只需要看到最后一个调用的,就是下面的这个:

image.png node是我们的节点,还有一些简单的配置,然后调用了父类的构造方法,我们点进去看下,我们可以看到这里面给我们初始化了一个节点处理器和一个最大尝试次数:

image.png

然后我们点这个连接处理器进去,看到下面的构造方法:

image.png

然后我们再点它的父类构造方法,看下,可以看到这里面缓存了一些cluster的信息,然后接着进行了一个初始化,就像下面这样:

image.png

这里可以看到一些初始化信息,都是一些常见的配置。 image.png

这个类下面有个方法就是如下的方法,这个方法呢有个变量是slots,干嘛的呢?是存放节点信息的集合的,这个slotindo是每个节点信息,每个节点信息包括0号位置槽位区间上限的信息,1号位置槽位区间下限的信息,2号位置主节点的信息和3号位置从节点的信息。 image.png

获取槽位集合 image.png

接下来就是解析节点信息,获取节点信息和分配节点信息的操作,只有解析的是主节点的信息,才进行分配,如果不是主节点,把IP和地址拼接当做key,jedispool当作value缓存起来。 image.png

Guess you like

Origin juejin.im/post/7068272119053811725