2015-06-26 17 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将禁用超时。 –

相关问题