利用commons pool2开发高性能的连接池

利用commons pool2开发之前先看他的一个最佳实践 -- JedisPool。
JedisPool是redis client的连接池,内部池对象的管理就是采用commons pool2。采用它的有很多优点是,例如:避免过多的创建连对象、自动处理最大空闲数量,避免自己处理线程问题等等。

利用commons pool2开发高性能的连接池_第1张图片
JedisPool

只是做初始行为 设置ip host ssl等信息。



真正执行初始化 获取资源 归还资源的行为都是用pool来实现,pool内部含有GenericObjectPool ,GenericObjectPool就是管理池对象的最终类,它实现了ObjectPool接口,把borrowObject returnObject的方法都实现了.

JedisFactory

实现PooledObjectFactory ,GenericObjectPool 内部创建池对象就是通过这一个类,以及销毁池对象也是,具体的实现就端口client和关闭client连接。

JedisPoolConfig

定制专属的配置信息。

利用commons pool2 创建连接池大概就是这样,下来我们也可以通过commons pool2 创建自己的对象连接池

  • 需要放进连接池的对象
利用commons pool2开发高性能的连接池_第2张图片
  • 对象生产工厂


    利用commons pool2开发高性能的连接池_第3张图片
  • 连接池

利用commons pool2开发高性能的连接池_第4张图片
  • 测试
利用commons pool2开发高性能的连接池_第5张图片
这是个最简单的案例 明白commons pool2的使用

原理

核心方法 borrowObject

利用commons pool2开发高性能的连接池_第6张图片

默认 borrowMaxWaitMillis < 0 由于创建池对象到达最多数量时,就会执行到idleObjects.takeFirst() ,这个方法就会无限阻塞,一直等待有空闲的池对象。所有使用玩池对象的时候一定要归还。

create
利用commons pool2开发高性能的连接池_第7张图片

returnObject

利用commons pool2开发高性能的连接池_第8张图片

归还的时候简单 判断空闲数量是否大于最多空闲值,对齐进行销毁 或 放进空闲队列里;

你可能感兴趣的:(利用commons pool2开发高性能的连接池)