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

     

  • 相关阅读:
    高价格快消品终端制胜的七大“法宝”
    欧美零售商的全渠道实践
    如何做好IT项目启动阶段的管理
    项目进度管理的三大软技巧
    如何建立生鲜商品的组织结构和采购渠道
    生鲜关注点和注意点
    超市基本业务介绍
    chrome开发配置(四)生成项目及配置库引用
    chrome开发配置(三)安装开发工具
    chrome开发配置(二)获取源代码
  • 原文地址:https://www.cnblogs.com/zhengzuozhanglina/p/11383035.html
Copyright © 2020-2023  润新知