做一个积极的人
编码、改bug、提升自己
我有一个乐园,面向编程,春暖花开!
你好,JedisPoolConfig
Java中使用Jedis作为连接Redis的工具。在使用Jedis的也可以配置JedisPool连接池,JedisPool配置参数大部分是由JedisPoolConfig的对应项来赋值的。本文简单总结几个常用的配置,然后通过源码(版本jedis-3.1.0)的角度让你理解配置这些参数的原理。
首先了解一下池化((对象池、数据库连接池、线程池等等))的一些思想和好处。方便后面对JedisPoolConfig的配置的理解。
池化的基本思想:
1、可以在初始化的时候创建一些对象,当有需要使用的时候不直接从池中获取,提高响应速度;
2、使用过的对象不进行销毁,保存起来,等下一次需要对象的时候,拿出来重复使用,减少频繁创建对象所造成的开销;
3、创建的对象统一保存,方面管理和维护。
池化好处总结:
1、提高响应的速度
2、降低资源的消耗
3、方便管理和维护
JedisPoolConfig配置说明 类图和源码解析
首先看一下类图:
BaseGenericObjectPool:封装公共的配置的参数。
private long maxWaitMillis = DEFAULT_MAX_WAIT_MILLIS;// DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS = 1000L * 60L * 30L
private long minEvictableIdleTimeMillis =
DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS;
// DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS = -1L
private long timeBetweenEvictionRunsMillis =
DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS;
// DEFAULT_NUM_TESTS_PER_EVICTION_RUN = 3
private int numTestsPerEvictionRun =
DEFAULT_NUM_TESTS_PER_EVICTION_RUN;
// DEFAULT_TEST_ON_CREATE = false
private boolean testOnCreate = DEFAULT_TEST_ON_CREATE;
// DEFAULT_TEST_ON_BORROW = false
private boolean testOnBorrow = DEFAULT_TEST_ON_BORROW;
// DEFAULT_TEST_ON_RETURN = false
private boolean testOnReturn = DEFAULT_TEST_ON_RETURN;
// DEFAULT_TEST_WHILE_IDLE = false
private boolean testWhileIdle = DEFAULT_TEST_WHILE_IDLE;
//...
}
GenericObjectPoolConfig:继承BaseGenericObjectPool,内部代码很简单,封装了GenericObjectPool的配置。主要是maxTotal、maxIdle、minIdle。 此类不是线程安全的;它仅用于提供创建池时使用的属性。在创建单例的JedisPool 使用JedisPoolConfig需要注意线程安全问题,下面会有个demo介绍创建单例JedisPool。
public class GenericObjectPoolConfig<T> extends BaseObjectPoolConfig<T> {
/**
* The default value for the {@code maxTotal} configuration attribute.
* @see GenericObjectPool#getMaxTotal()
*/
public static final int DEFAULT_MAX_TOTAL = 8;
// ...
// DEFAULT_MAX_TOTAL = 8
private int maxTotal = DEFAULT_MAX_TOTAL;
// DEFAULT_MAX_IDLE = 8
private int maxIdle = DEFAULT_MAX_IDLE;
// DEFAULT_MIN_IDLE = 0
private int minIdle = DEFAULT_MIN_IDLE;
// ...
}
JedisPoolConfig继承了上面的优良基因,然后又对其他的几个设置属性重新设值。