JedisPool 记得 close(2.9 )


Java代码  
  1. public class Test {    
  2.         
  3.     private static Pool<Jedis> pool;    
  4.     static{    
  5.         JedisPoolConfig config = new JedisPoolConfig();    
  6.         //最大连接数    
  7.         config.setMaxTotal(10);    
  8.         //最大空闲连接数    
  9.         config.setMaxIdle(5);    
  10.         //连接耗尽时是否阻塞, false报异常,ture阻塞直到超时    
  11.         config.setBlockWhenExhausted(false);    
  12.         //在获取连接的时候检查有效性    
  13.         config.setTestOnBorrow(true);    
  14.         //master节点名称  
  15.         String masterName = "mymaster";    
  16.         //Sentinel也支持集群    
  17.         Set<String> sentinels = new HashSet<String>();      
  18.         sentinels.add("10.110.20.23:26379");      
  19.         pool = new JedisSentinelPool(masterName, sentinels,config);      
  20.     }    
  21.     
  22.     public static void main(String[] args) {    
  23.         for (int i = 0; i < 11; i++) {  
  24.             Jedis jedis = pool.getResource();  
  25.             System.out.println(  
  26.                     (i + 1) + ","   
  27.                     + jedis   
  28.                     + ",activeNum:"+ pool.getNumActive()   
  29.                     + ",idleNum:" + pool.getNumIdle()  
  30.                     + ",waiterNum:" + pool.getNumWaiters());  
  31.             //jedis.close();  
  32.         }  
  33.     }  

 上述代码中,建立的连接池最大连接数是10,在main方法中,循环从连接池中获取链接,取11次,取得链接后,并不执行close()来关闭链接

执行结果:

Java代码   收藏代码
  1. 1,redis.clients.jedis.Jedis@2f7c7260,activeNum:1,idleNum:0,waiterNum:0  
  2. 2,redis.clients.jedis.Jedis@2d209079,activeNum:2,idleNum:0,waiterNum:0  
  3. 3,redis.clients.jedis.Jedis@6bdf28bb,activeNum:3,idleNum:0,waiterNum:0  
  4. 4,redis.clients.jedis.Jedis@6b71769e,activeNum:4,idleNum:0,waiterNum:0  
  5. 5,redis.clients.jedis.Jedis@2752f6e2,activeNum:5,idleNum:0,waiterNum:0  
  6. 6,redis.clients.jedis.Jedis@e580929,activeNum:6,idleNum:0,waiterNum:0  
  7. 7,redis.clients.jedis.Jedis@1cd072a9,activeNum:7,idleNum:0,waiterNum:0  
  8. 8,redis.clients.jedis.Jedis@7c75222b,activeNum:8,idleNum:0,waiterNum:0  
  9. 9,redis.clients.jedis.Jedis@4c203ea1,activeNum:9,idleNum:0,waiterNum:0  
  10. 10,redis.clients.jedis.Jedis@27f674d,activeNum:10,idleNum:0,waiterNum:0  
  11. Exception in thread "main" redis.clients.jedis.exceptions.JedisException: Could not get a resource from the pool  
  12.     at redis.clients.util.Pool.getResource(Pool.java:51)  
  13.     at redis.clients.jedis.JedisSentinelPool.getResource(JedisSentinelPool.java:209)  
  14.     at redis.clients.jedis.JedisSentinelPool.getResource(JedisSentinelPool.java:17)  
  15.     at Test.main(Test.java:41)  
  16. Caused by: java.util.NoSuchElementException: Pool exhausted  
  17.     at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:464)  
  18.     at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)  
  19.     at redis.clients.util.Pool.getResource(Pool.java:49)  
  20.     ... 3 more  

可以看到,每次取出的链接都是新的链接, 并且取一次,连接池的活动连接数activeNum增一,第11次取的时候,抛出了连接池耗尽( Pool exhausted)的错误。

 

将上述代码的main()稍作调整,取出链接后,执行close()操作,调整后代码如下:

 public static void main(String[] args) {  

for (int i = 0; i < 11; i++) {

Jedis jedis = pool.getResource();

System.out.println(

(i + 1) + "," 

+ jedis 

+ ",activeNum:"+ pool.getNumActive() 

+ ",idleNum:" + pool.getNumIdle()

+ ",waiterNum:" + pool.getNumWaiters());

jedis.close();

}

再次运行,结果如下:

1,redis.clients.jedis.Jedis@2f7c7260,activeNum:1,idleNum:0,waiterNum:0

2,redis.clients.jedis.Jedis@2f7c7260,activeNum:1,idleNum:0,waiterNum:0

3,redis.clients.jedis.Jedis@2f7c7260,activeNum:1,idleNum:0,waiterNum:0

4,redis.clients.jedis.Jedis@2f7c7260,activeNum:1,idleNum:0,waiterNum:0

5,redis.clients.jedis.Jedis@2f7c7260,activeNum:1,idleNum:0,waiterNum:0

6,redis.clients.jedis.Jedis@2f7c7260,activeNum:1,idleNum:0,waiterNum:0

7,redis.clients.jedis.Jedis@2f7c7260,activeNum:1,idleNum:0,waiterNum:0

8,redis.clients.jedis.Jedis@2f7c7260,activeNum:1,idleNum:0,waiterNum:0

9,redis.clients.jedis.Jedis@2f7c7260,activeNum:1,idleNum:0,waiterNum:0

10,redis.clients.jedis.Jedis@2f7c7260,activeNum:1,idleNum:0,waiterNum:0

11,redis.clients.jedis.Jedis@2f7c7260,activeNum:1,idleNum:0,waiterNum:0

-----------------------------------------------

活动连接数始终只有一个,并且每次取出的都是同一个链接(redis.clients.jedis.Jedis@2f7c7260)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值