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