从源码角度看JedisPoolConfig参数配置

做一个积极的人

编码、改bug、提升自己

我有一个乐园,面向编程,春暖花开!

 

你好,JedisPoolConfig

Java中使用Jedis作为连接Redis的工具。在使用Jedis的也可以配置JedisPool连接池,JedisPool配置参数大部分是由JedisPoolConfig的对应项来赋值的。本文简单总结几个常用的配置,然后通过源码(版本jedis-3.1.0)的角度让你理解配置这些参数的原理。

 

首先了解一下池化((对象池、数据库连接池、线程池等等))的一些思想和好处。方便后面对JedisPoolConfig的配置的理解。

池化的基本思想

1、可以在初始化的时候创建一些对象,当有需要使用的时候不直接从池中获取,提高响应速度;

2、使用过的对象不进行销毁,保存起来,等下一次需要对象的时候,拿出来重复使用,减少频繁创建对象所造成的开销;

3、创建的对象统一保存,方面管理和维护。

池化好处总结

1、提高响应的速度

2、降低资源的消耗

3、方便管理和维护

 

JedisPoolConfig配置说明 类图和源码解析

首先看一下类图:

UTOOLS1571543704493.png

 

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的配置。主要是maxTotalmaxIdleminIdle 此类不是线程安全的;它仅用于提供创建池时使用的属性。在创建单例的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继承了上面的优良基因,然后又对其他的几个设置属性重新设值。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppxds.html