zoukankan      html  css  js  c++  java
  • 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)方法流程图

     

  • 相关阅读:
    npm 报错 : `Error: ENOENT: no such file or directory, mkdir D:\`
    weex中根据返回图片的大小,进行等比缩放展示
    weex中怎么动态循环产生输入框?字段名根据后端返回的数据而定
    hdu 2473 Junk-Mail Filter(并查集)
    cf2A Winner(implementation)
    hdu 5185 Equation(分析+DP)
    hdu 5183 Negative and Positive (NP)(STL-集合【HASH】)
    hdu 2059 龟兔赛跑(DP)
    hdu 1978 How many ways(DP)
    hdu 2577 How to Type(DP)
  • 原文地址:https://www.cnblogs.com/zhengzuozhanglina/p/11383035.html
Copyright © 2011-2022 走看看