I am trying to connect the redis database using jedis-client in the web application but after some day the application throwing an exception as below:
java.util.concurrent.ExecutionException: redis.clients.jedis.exceptions.JedisDataException: ERR max number of clients reached
I tried to figure out is it due to the redis not able to handle the connection or may be i have not close the redis connection.
//code snippet to connect redis
Jedis jedis = new Jedis("localhost");
jedis.connect();
I have not closed the connection as I was thinking the connection will get close by redis-server as it is idle. May be this will be cause.
答案 0 :(得分:0)
每次要查询redis服务器时,您似乎都在打开连接。一段时间后,您连接了太多客户端,服务器无法接受新连接。
有几种选择:
断开空闲客户端服务器端
如果您希望redis服务器断开空闲客户端,您应该查看redis配置: #客户端空闲N秒后关闭连接(0表示禁用) 超时0
请参阅reference redis conf。 您可能将此值设置为0.更改它并重新启动redis服务器应解决您的问题。
关闭连接客户端
致电
jedis.quit();
这将告诉您的服务器和客户端关闭连接。如果不需要保持连接,那就更优雅了。
使用连接池
如果您的redis应用程序中有多个客户端/线程,则应使用Jedis客户端中的连接池。它应该已经包含在您的依赖项中。
它将在需要时维护/重新创建连接。 您在需要连接时查询池,并在完成查询后将其返回给它(与jdbc池完全相同)。
以下是他们文档中的basic example。