Redis(Jedis)連接池報錯“Could not get a resource since the pool is exhausted”的解決方法

今天在使用Jedis連接池的時候出了一個問題,如題:

連接池配置如下:

GenericObjectPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(100);
        config.setMaxIdle(100);
        config.setMinIdle(10);
        config.setTestOnBorrow(false);
        config.setTestOnReturn(false); 
        config.setTestOnCreate(true);
        config.setBlockWhenExhausted(true);
        config.setMaxWaitMillis(1000); 

看到這個問題首先考慮的是連接池中的Jedis對象使用完後後續對象獲取失敗,由於我並沒有併發的獲取所以不是這種情況,後來通過後續的查資料發現問題出現在Redis的保護模式上面(具體的可以自行gg或者bd)。通過debug單步發現問題處在配置redis連接池的config.setTestOnCreate(true);這一句上面,這一句是說創建連接時測試是否有效,如果設置爲true就需要將redis和你的程序放到同一臺機器上或者同一局域網上面或者關閉該模式。所以這裏我們只需要將true改爲false即可。

總結:

1、最好將redis和程序放到同一臺主機或者同一局域網內。

2、項目開發是可以將setTestOnCreate設置爲false,當項目上線時通常我們會將其部署理論上的同一區域內,所以需要將setTestOnCreate這是爲true。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章