即使我执行了以下操作,也会收到连接异常(最后给出):
在创建Jedis实例时,我将超时字段设置为1小时(60 * 60 * 1000)。我也尝试过0,这也不起作用。
当我在7分钟后检查日志时,我注意到了它,虽然我认为异常会更早发生(在300秒)。为什么我一直这样做?知道为什么吗?
Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: It seems like server has closed the connection.
at redis.clients.util.RedisInputStream.readLine(RedisInputStream.java:90)
at redis.clients.jedis.Protocol.processMultiBulkReply(Protocol.java:111)
at redis.clients.jedis.Protocol.process(Protocol.java:64)
at redis.clients.jedis.Protocol.read(Protocol.java:127)
at redis.clients.jedis.Connection.getBinaryMultiBulkReply(Connection.java:199)
at redis.clients.jedis.BinaryJedis.smembers(BinaryJedis.java:1187)
答案 0 :(得分:1)
我建议:
检查Redis服务器配置文件中是否未设置非活动超时。将其设置为零。 https://github.com/antirez/redis/blob/unstable/redis.conf#L44
检查应用程序执行的smembers命令是否返回数百万个项目。超过某个阈值,大型通信缓冲区可能导致连接关闭。
当然,它也可能是由于网络基础设施本身,特别是如果您在公共云的不同虚拟机上运行Redis客户端和服务器。