JedisConnectionFactory 底层学习笔记

JedisConnectionFactory 

底层:使用的Common-pool2的对象池管理

更底层:实例对像存储使用LinkedBlockingDeque  双向链表

         类实例化应用的是工厂生产( makeObject() )最底层实际是Socket连接 Connection.java

JedisConnectionFactory 实现接口 
        InitializingBean(afterPropertiesSet() 方法在实例化后会被调用
            AbstractAutowireCapableBeanFactory.invokeInitMethods
            Spring初始化bean的时候,如果该bean实现了InitializingBean接口,并且同时在配置文件中指定了init-method,系统则   
            是先调用afterPropertieSet()方法,然后再调用init-method中指定的方法。
        DisposableBean (destroy() 定义了连接池及JedisCluster集群客户端的销毁)
初始化:
        方式:@Bean注解 / Xml定义的方式 由Spring工厂初始化
        参数:Config 配置redis连接池(连接线程池)的相关基本参数 BaseObjectPoolConfig
       JedisConnectionFactory(JedisClientConfiguration config)
执行:afterPropertiesSet()
       1.判定集群模式 如果是 则设置 哨兵的必要参数
       2. 如果启用线程池 createPool(); JedisClientConfiguration usePooling() 方法可以设置是否启用
              DefaultJedisClientConfiguration 默认不启用连接池 无默认配置
              MutableJedisClientConfiguration 默认启用连接池 有默认配置
      3. 如果是集群createCluster();集群模式下的创建 
createPool()方法运行线索:
       单机模式下: JedisConnectionFactory 
                      >> createRedisPool()
                       >> new JedisPool(...)
                           Pool
                           >> initPool(poolConfig, factory);
                           >> new GenericObjectPool<T>(factory, poolConfig);
                           GenericObjectPool(底层common-pool2 实现)
                           >> * Handles JMX registration and the initialization required for monitoring.
                          * 创建对象队列 :LinkedBlockingDeque 容量为Integer.MAX_VALUE Fairness 非公平锁
                          * 设置参数
      集群模式: JedisConnectionFactory 
                    >> createRedisSentinelPool()
                    >> new JedisSentinelPoo(...)
                     JedisSentinelPool
                      >> HostAndPort master = initSentinels(sentinels, masterName); initPool(master);
                           >> Pool  initPool(poolConfig, factory); 同单机模式
      createCluster(); 集群模式下 创建Cluster
             JedisConnectionFactory
               >> createCluster()
                  >> createCluster(...)
                     >> new JedisCluster(hostAndPort, connectTimeout, readTimeout, redirects, getPassword(), poolConfig)
                   JedisCluster
                      >> new BinaryJedisCluster  
                              new JedisSlotBasedConnectionHandler(jedisClusterNode, poolConfig, connectionTimeout, soTimeout);
                              JedisSlotBasedConnectionHandler
                                  >> initializeSlotsCache >> discoverClusterNodesAndSlots  初始化所有的slots 并放入Cache
                                                                                        Cache:JedisClusterInfoCache
                                                             >> assignSlotsToNode >> setupNodeIfNotExist >> new JedisPool(...)
               new ClusterCommandExecutor(...)   命令执行器 jdk 1.7以后才有
 

学习连接:

https://blog.csdn.net/qq_32924343/article/details/100557541

https://blog.csdn.net/dawn_after_dark/article/details/82112399
 
 
                           
 
 
 
 
 
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值