redis提示Could not get a resource from the pool(jedis連接池配置)


起初在JedisPool中配置了50個活動連接,但是程序還是經常報錯:Could not get a resource from the pool

連接池剛開始是這樣配置的:

JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(20);
config.setMaxWaitMillis(1000 * 1);
config.setTestOnBorrow(true);
config.setTestOnReturn(true);
JedisPool pool = new JedisPool(config, "10.10.10.167", 6379);

經過測試發現程序的活動連接基本上只有1個,程序剛啟動的時候可能會有2-5個活動的連接,但是過一段時間后就獲取不到第二個活動的連接了。

后來修改為:

JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(200);
config.setMaxIdle(50);
config.setMinIdle(8);//設置最小空閑數
config.setMaxWaitMillis(10000);
config.setTestOnBorrow(true);
config.setTestOnReturn(true);
//Idle時進行連接掃描
config.setTestWhileIdle(true);
//表示idle object evitor兩次掃描之間要sleep的毫秒數
config.setTimeBetweenEvictionRunsMillis(30000);
//表示idle object evitor每次掃描的最多的對象數
config.setNumTestsPerEvictionRun(10);
//表示一個對象至少停留在idle狀態的最短時間,然后才能被idle object evitor掃描並驅逐;這一項只有在timeBetweenEvictionRunsMillis大於0時才有意義
config.setMinEvictableIdleTimeMillis(60000);

JedisPool pool = new JedisPool(config, ip, port, 10000, "密碼", 0);

經過幾個小時的測試,讀取redis了上百萬次再也沒有發生上述錯誤。

在這里進行簡單的猜測:連接池中空閑的連接過一陣子就會自動斷開,但是連接池還以為連接正常,就出現了這個錯誤。

另外,從連接池中獲取連接的時候,可以寫個循環,直到獲取成功才讓出循環。


免責聲明!

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



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