=
=
这篇博客,就不怎么分析源码了,咱们尽量把观察的层次提高一下,主要分析流程。
下图是JedisPool里面用到的一些类(有些类我省略了,例如closeable)
PooledObjectFactory<T>,是一个泛型接口,里面有makeObjcet,destroyObject,validateObject等方法,就是生成一个对象,销毁一个对象,判定是否合法等的
PooledObject 是对基本对象的一个包装,包含基本对象的创建时间,状态等等
GenericObjectPool 里面包含了borrowObject与returnObject等方法
我们一般的从pool中取对象调用的是JedisPool的getResource方法
时序图如下:
在GenericObjectPool中有下面这个成员变量:
private final LinkedBlockingDeque<PooledObject<T>> idleObjects;
在上面时序图里第三步create前,会先在idleObjects里面找(idleObjects.pollFirst()),如果没有对象(这是一个队列),才去create,否则就直接返回idleobjects里面的。
释放连接,我们一般直接调用jedis的close方法。
如下图
最后那个LinkedBlockingDeque就是idleObjects。
当然,我上面的时序图,是我省略了很多很多的,但是主体就是上面的。
另外,pool的源码我自己看的也比较粗,如果文中有什么错误,还请各位大神一定指出。
有一个问题,如果我给pool设置的最少连接是20
那么这20个连接时连接池一开始就循环产生的,还是后面借一个,才生出一个?
换句话说就是勤生产还是懒生产。
答案是勤生产(准确的说是,自pool加载后timeBetweenEvictionRunsMillis毫秒开始生产这个连接对象,timeBetweenEvictionRunsMillis模式是30000毫秒)
timeBetweenEvictionRunsMillis毫秒秒检查一次连接池中空闲的连接,把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止
- //GenericObjectPool.java
- void ensureMinIdle() throws Exception {
- ensureIdle(getMinIdle(), true);
- }
- private void ensureIdle(int idleCount, boolean always) throws Exception {
- if (idleCount < 1 || isClosed() || (!always && !idleObjects.hasTakeWaiters())) {
- return;
- }
- while (idleObjects.size() < idleCount) {
- PooledObject<T> p = create();
- if (p == null) {
- // Can't create objects, no reason to think another call to
- // create will work. Give up.
- break;
- }
- if (getLifo()) {
- idleObjects.addFirst(p);
- } else {
- idleObjects.addLast(p);
- }
- }
- if (isClosed()) {
- // Pool closed while object was being added to idle objects.
- // Make sure the returned object is destroyed rather than left
- // in the idle object pool (which would effectively be a leak)
- clear();
- }
- }
=
=
=
相关推荐
导入后,可以通过Jedis类的静态方法`JedisPoolConfig`配置连接池参数,然后创建`JedisPool`实例,使用`JedisPool`获取`Jedis`对象进行Redis操作,操作完成后,需要将`Jedis`对象返回给连接池,以便后续使用。...
在Jedis 2.7.0版本中,它使用了Apache Commons Pool 2.3来实现连接池功能。解压`pool2-2.3.zip`后,你会得到`commons-pool2-2.3.jar`,同样需要将其添加至项目类路径。使用Jedis连接池的基本配置如下: 1. 引入依赖...
JedisPool pool = new JedisPool(config, "localhost", 6379); try (Jedis jedis = pool.getResource()) { jedis.set("key", "value"); String value = jedis.get("key"); } ``` Jedis还支持事务操作,可以一次...
DBCP(DataBase Connection Pool)是 apache common上的一个 java 连接池项目,也是 tomcat 使用的连接池组件,依赖 于Jakarta commons-pool 对象池机制,DBCP可以直接的在应用程序中使用。 使用DBCP会用到commons-...
在这个例子中,我们首先创建了一个JedisPoolConfig实例,设置了连接池的最大和最小连接数,然后用这个配置创建了JedisPool。在main方法中,我们从池中获取一个Jedis实例,进行set和get操作,最后确保Jedis实例被正确...
《Jedis 2.9与Common Pool:Redis客户端与连接池详解》 Redis,作为一款高性能的Key-Value存储系统,被广泛应用于缓存、消息队列等多种场景。在Java开发中,Jedis是一个非常流行的Redis客户端库,而Jedis 2.9版本则...
《Apache Commons Pool 2.8.1:高效对象池实现详解》 Apache Commons Pool 是一个广泛使用的开源组件,主要用于提供对象池化的实现。在Java世界里,对象池化是一种优化资源管理的重要技术,通过复用已创建的对象,...
需要使用Redis连接池的话,还需commons-pool包,提供了强大的功能,包含最新的jar包
在Redis中,Jedis提供了一个连接池实现,即JedisPool,它允许开发者预先创建一定数量的Redis连接,当需要使用时从池中获取,用完后归还,而不是直接关闭。 JedisPool的使用步骤大致如下: 1. 引入依赖:在项目中,...
jedispool是基于apache common pool实现的连接池,它将连接Redis服务器的操作抽象成了一个池子,池子中可以容纳多个连接对象。客户端可以从池子中获取连接对象,执行操作后再返还给池子。jedispool提供了许多配置...
而`common-pool2`就是Apache Commons提供的一个通用对象池库,它是Jedis连接池的必备组件。 `common-pool2`是Apache Commons Pool的第二个主要版本,它提供了对对象池的实现,允许开发者高效地管理和重用对象,避免...
使用JDK1.8、SpringBoot2.2.10.RELEASE、lombok1.18.8、guava23.0、hutool5.3.10、commons-pool2 2.7.0、tika1.22等实现多Ftp连接池实现,通过守护线程实现连接池内连接可用性校验,配置最大、最小连接个数防止Ftp...
下面通过一个简单的样例来说明如何利用apache common pool来应用对象池。...也许本样例并不是很恰当,但是如何StringFormat换成是数据库连接就非常适合池技术了,此样例仅用于说明如何使用apache common pool池而已。
这在需要按特定键分配对象的场景下非常有用,如数据库连接池。`KeyedObjectPool-uml.jpg`可能是一个UML图,展示了`KeyedObjectPool`的相关类和接口关系。 `PooledObjectFactory`接口扮演了对象工厂的角色,负责创建...
这个例子展示了如何利用Apache Commons Pool2创建一个OSS连接池,并将其与Spring框架集成。通过Spring的依赖注入,我们可以方便地在应用中使用这些配置好的连接池。在实际项目中,可以根据需求调整`...
Apache Commons DBCP(Database Connection Pool)是Apache开源组织提供的一个数据库连接池实现。它允许开发者在应用中高效地管理和重用数据库连接,从而提高系统性能并降低资源消耗。DBCP 1.4是这个库的一个稳定...
commons-dbcp-1.4 jar java连接池. .commons-dbcp 是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要3个包:
套接字-Apache-公共-Pool2 这是一个有关如何使用套接字服务器和客户端的演示。 套接字客户端使用Apache公共pool2来管理套接字。 因此,我们可以在多线程的情况下使用共享套接字。 我使用bernardvai的示例创建了套接...
Apache Commons DBCP (Database Connection Pool) 和 Commons Pool 是两个重要的Java库,它们在处理数据库连接池方面发挥着核心作用。这两个JAR文件——commons-dbcp-1.4.jar和commons-pool-1.4.jar,是Apache软件...