【问题标题】:Redis Connection Closed ErrorRedis 连接关闭错误
【发布时间】:2014-04-11 15:20:15
【问题描述】:

即使我执行了以下操作,我也会收到连接异常(在最后给出):

在创建 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)

【问题讨论】:

标签: redis jedis


【解决方案1】:

我建议:

  • 在 Redis 服务器配置文件中未设置检查非活动超时。将其设置为零。 https://github.com/antirez/redis/blob/unstable/redis.conf#L44

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

当然,这也可能是由于网络基础架构本身造成的,尤其是当您在公共云的不同虚拟机上运行 Redis 客户端和服务器时。

【讨论】:

  • 我检查了 redis.conf 文件并发现这一行“超时 0”我需要更改任何内容。我也不明白你的会员评论。请详细说明。
  • Timeout 0 表示没有不活动超时 - 这很好。查看您发布的堆栈,它似乎在 smembers 命令上失败了。所以你可能想检查这个命令返回的集合是小还是很大。
  • 我在带有连接池的多线程环境中使用 jedis。现在我创建了连接池并使用了 setTestOnBorrow(true),现在问题似乎已经解决了。让我们来看看!!!手指交叉!!
猜你喜欢
  • 2022-11-07
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2017-06-12
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多