JedisClusterInfoCache功能模塊
方法名 | 說明 |
---|---|
集群發現及本地集群緩存信息 | |
public void discoverClusterNodesAndSlots(Jedis jedis) | 通過cluster slots命令發現集群,將集群節點分別緩存到nodes和slots緩存對象中 |
private void discoverClusterSlots(Jedis jedis) | 通過cluster slots命令發現集群,將集群節點緩存到slots緩存對象中 |
public void assignSlotsToNode(ListtargetSlots,HostAndPort targetNode) | 從nodes對象中尋找匹配的master節點,並放入slots緩存對象中 |
public JedisPool setupNodeIfNotExist(HostAndPort node) | 判斷nodes緩存中是否存在該節點,如果存在,從nodes對象中取出該節點,如果不存在,則新生成JedisPool對象並放入nodes緩存中 |
public void assignSlotToNode(intslot,HostAndPort targetNode) | 從nodes對象中尋找匹配的master節點,並放入slots緩存對象中 |
private List getAssignedSlotArray(List slotInfo) | 將槽區間轉為槽列表 |
集群緩存信息刷新和重置 | |
public void renewClusterSlots(Jedis jedis) | 刷新緩存信息 |
public void reset() | 重置緩存,將nodes和slots緩存對象中的數據全部清空 |
緩存對象獲取 | |
public JedisPool getNode(String nodeKey) | 根據key(host:port)從nodes緩存中獲取JedisPool對象 |
public JedisPool getSlotPool(int slot) | 根據slots信息獲取對應的master節點信息 |
public Map<String,JedisPool> getNodes() | 獲取nodes緩存 |
public List getShuffledNodesPool() | 將nodes中所有對象全部打亂重排並返回新的nodes緩存 |
輔助方法 | |
private HostAndPort generateHostAndPort(List hostInfos) | 從槽信息對象中獲取host和port,轉換為HostAndPort對象 |
public static String getNodeKey(HostAndPort hnp) | 獲取HostAndPort中的host和port,拼接為host:port字符串 |
public static String getNodeKey(Client client) | 從client對象中獲取host和port,拼接為host:port字符串 |
public static String getNodeKey(Jedis jedis) | 從Jedis對象中獲取host和port,拼接為host:port字符串 |
集群發現:提供實例化的Jedis對象,通過"cluster slots"命令獲取集群信息,轉換為Java對象后,將主從節點信息全部存放至nodes緩存集合中,同時獲取所有的槽位信息,將slot->master節點信息鍵值對存放至slots對象中,具體的流程如下所示。
- discoverClusterNodesAndSlots(Jedis jedis)方法流程圖
- discoverClusterSlots(Jedis jedis)方法流程圖
集群刷新和重置:在無法獲取可用的Jedis連接對象時,會執行集群信息刷新操作.如果提供了可用的Jedis對象,那么會調用discoverClusterSlots()方法重新將新的集群信息放入nodes和slots緩存中。如果提供的參數為null值,那么首先會將nodes中的對象打散重排,然后遍歷nodes,獲取其中的JedisPool對象,最后調用discoverClusterSlots()方法重新將新的集群信息放入nodes和slots緩存。
- renewClusterSlots(Jedis jedis)方法流程圖