2015-06-26 16 views
0

我想在web應用程序中使用jedis-client連接redis數據庫,但經過一段時間應用程序拋出如下例外:java.util.concurrent.ExecutionException:redis.clients.jedis.exceptions.JedisDataException:ERR達到客戶端的最大數量

java.util.concurrent.ExecutionException: redis.clients.jedis.exceptions.JedisDataException: ERR max number of clients reached 

我試圖找出是由於無法處理連接,或者可能是我還沒有關閉Redis的連接Redis的。

//code snippet to connect redis 
Jedis jedis = new Jedis("localhost"); 
jedis.connect(); 

我還沒有關閉連接,因爲我認爲連接將由redis-server關閉,因爲它處於空閒狀態。 可能是這將是原因。

+2

目前還不清楚你在這裏問什麼。你能改進這個問題的措辭嗎? – Armand

回答

0

您似乎在每次想要查詢您的redis服務器時都會打開一個連接。一段時間後,連接的客戶端太多,服務器無法接受新的連接。

有幾種選擇:

斷開空閒客戶端服務器端

如果你希望你的Redis服務器斷開空閒的客戶,你應該看看你的Redis的配置: #關閉後的連接客戶端空閒N秒(0禁用) 超時0

查看reference redis conf。 您可能已將此值設置爲0.對其進行更改並重新啓動您的Redis服務器應解決您的問題。

關閉連接客戶端

只需撥打

jedis.quit(); 

這將告訴您兩種服務器和客戶端關閉連接。如果不需要維護一個連接,它會更優雅。

如果你在你的Redis應用程序,你應該使用Jedis客戶端連接池的多個客戶端/線程使用連接池

。它應該已經包含在你的依賴中。

它會在需要時維護/重新建立連接。 當您需要連接時查詢池,並在完成查詢時將其返回(完全像jdbc池)。

以下是他們的文檔中的basic example

+0

我已經在redis.conf文件中完成了超時0配置,並且處於上述錯誤將會處理的印象中,但問題仍然存在。我會嘗試第二種方法。但是仍然無法得到它爲什麼超時0沒有工作。任何想法? – suresh

+0

你應該設置一個超時值,以秒爲單位而不是0.例如5.這意味着每個空閒超過5秒的客戶端都將被斷開。將其設置爲0將禁用超時。 –

相關問題