Redis连接关闭错误

5

尽管我执行了以下操作,但我仍然遇到连接异常(在结尾处给出):

在创建Jedis实例时,我将timeout字段设置为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)

我遇到了这个问题。你能帮我吗?谢谢。https://dev59.com/w5Hea4cB1Zd3GeqPuMxM - jonnyLee
1个回答

3
我建议:
  • 检查Redis服务器配置文件中是否设置了不活动超时时间。将其设置为零。https://github.com/antirez/redis/blob/unstable/redis.conf#L44

  • 检查您的应用程序执行的smembers命令是否返回数百万个项目。超过一定阈值,大型通信缓冲区可能会导致连接关闭。

当然,这也可能是由于网络基础设施本身引起的,特别是如果您在公共云的不同VM上运行Redis客户端和服务器。

我检查了redis.conf文件,发现这一行“timeout 0”,我需要更改什么吗?另外,我不理解你的SMEMBER评论,请详细说明。 - Alex
超时时间为0表示没有不活动超时 - 这很好。从您发布的堆栈中看,似乎它在smembers命令上失败了。因此,您可能需要检查此命令返回的集合是小还是非常大。 - Didier Spezia
我在多线程环境下使用 jedis 和连接池。现在,我创建了连接池并使用 setTestOnBorrow(true) 方法,目前看来问题已经解决了。让我们拭目以待!祈求好运!! - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接