Jedis源碼分析:JedisClusterInfoCache


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)方法流程圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM