Jedis異常:NoSuchElementException: Timeout waiting for idle object


出現異常:java.util.NoSuchElementException: Timeout waiting for idle object

出現原因是:不應該在try中釋放資源,而應該在finally中處理。在try中釋放資源,每當出現一次異常將會導致一個jedis對象無法釋放,pool池中可用的jedis對象資源會越來越少。終於將會導致java.util.NoSuchElementException: Timeout waiting for idle object。

這樣的問題是一個慢性問題,需要時間積累才會出現。因為請求無法獲取空暇對象,頁面會出現服務端500錯誤。

try{
    jedis = pool.getResource();
    // xxx 業務代碼
    // 原來代碼:pool.returnResource(jedis);
    // 應該放在finally塊中,否則每次發生異常將導致一個jedis對象沒有被移除  
}catch(RuntimeException e){
     if(jedis != null ) {
        // 獲取連接失敗時,應該返回給pool,否則每次發生異常將導致一個jedis對象沒有被回收
        pool.returnBrokenResource(jedis);    
    }
}finally{
    // 正確釋放資源
    if(jedis != null ) {
        pool.returnResource(jedis);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM