jedispool资源释放


我的天啊,这几天要被jedis逼疯了,网上好多资料并没有介绍jedis链接释放不了的方法,我确定他们那些老人肯定知道都,就是不说,你们说气人不。还有要吐槽哈jedis源码开发的那些家伙,怎么写的代码,连注释都没有,所以已后啊,程序员们,一定要写注释,好好的,坑人啊,好了,发泄发了,干正事!!!!

之前我写过spring   之jedis操作redis主从,在clinetConn类有个方法close(),这个方法有点问题,也是我要说的。

jedis.close();

jedispool.returnBrokenResource();

jedispool.returnResource();

jedis.quit();

jedis.disconnection();

以上这几个方法吧都是有关释放资源的,别的版本的jedis我不知道,jedis-2.9以上的版本已经使用了jedis.close();下面看看2.9以上版本的close()方法

public void close() {
if (dataSource != null) {
if ( client.isBroken()) {
this.dataSource.returnBrokenResource(this);
} else {
this.dataSource.returnResource(this);
}
} else {
 client.close();
}
}

看到了吧,jedis2.9以上的版本的close方法把  jedispool.returnBrokenResource();jedispool.returnResource()包括了,所以直接jedis.close()就可以释放连接了,但是有点肯爹的是,如果你在使用redis的时侯,想要close(),就不能释放,所以你先要退出client,就要用jedis.quit(),这样就完事了,有网上的资料是:

public void close(jedis){

 //.....

  jedis.quit();

  jedis.disconnection();

  

}

//完了发现使用了jedis.disconnection();之后,jedis又可以链接redis了,而且可以操作redis,

然后请看jedis.disconnection()的源码

public void disconnect() {
if (isConnected()) {
try {
outputStream.flush();
socket.close();
} catch (IOException ex) {
broken = true;
throw new JedisConnectionException(ex);
} finally {
IOUtils.closeQuietly(socket);
}
}
}

红色标记的代码,看看这儿http://blog.csdn.net/cwmbecoming/article/details/3265343,所以返回资源的方法如下:

public void closeJedisPool(Jedis jedis,int flag) {
// System.out.println(Client.isBroken());
if(flag==0){
jedis.close();
if(jedis.isConnected()){

try{
System.out.println("退出"+jedis.toString()+":"+jedis.quit());
jedis.disconnect();
}catch(Exception e){
System.out.println("退出失败");
e.printStackTrace();
}

}
jedis.close();
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM