今天在使用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。