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