Ошибка закрытия соединения с Redis

Я получаю исключение соединения (данное в конце), хотя я сделал следующее:

При создании экземпляра 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)

person Alex    schedule 19.10.2013    source источник
comment
Я столкнулся с этой проблемой. Вы можете помочь мне? Спасибо. http://stackoverflow.com/questions/34131736/redis-it-seems-like-server-has-closed-the-connection   -  person jonnyLee    schedule 09.12.2015


Ответы (1)


Я бы предложил:

  • чтобы проверить, что тайм-аут бездействия не установлен в файле конфигурации сервера Redis. Установите его на ноль. https://github.com/antirez/redis/blob/unstable/redis.conf#L44

  • чтобы убедиться, что команды smembers, выполняемые вашим приложением, не возвращают миллионы элементов. При превышении определенного порога большие коммуникационные буферы могут привести к закрытию соединения.

Конечно, это также может быть связано с самой сетевой инфраструктурой, особенно если вы запускаете клиент и сервер Redis на разных виртуальных машинах общедоступного облака.

person Didier Spezia    schedule 21.10.2013
comment
Я проверил файл redis.conf и обнаружил, что тайм-аут этой строки равен 0, нужно ли мне что-то менять. Также я не понял вашего комментария SMEMBER. Пожалуйста, уточните. - person Alex; 21.10.2013
comment
Тайм-аут 0 означает отсутствие тайм-аута бездействия, и это нормально. Глядя на опубликованный вами стек, кажется, что он не работает с командой smembers. Таким образом, вы можете проверить, является ли набор, возвращаемый этой командой, маленьким или очень большим. - person Didier Spezia; 21.10.2013
comment
Я использовал jedis в многопоточной среде с пулом соединений. Теперь я создал пул соединений и использовал setTestOnBorrow(true), проблема, похоже, решена на данный момент. Посмотрим!!! Скрестить пальцы!! - person Alex; 22.10.2013