当前位置:   article > 正文

JedisConnectionException: Unexpected end of stream._redis.clients.jedis.exceptions.jedisconnectionexce

redis.clients.jedis.exceptions.jedisconnectionexception: unexpected end of s

       JedisConnectionException: Unexpected end of stream

 

redis执行sunion时,由于key多,且里面的set值比较多,指令时间复杂的为(N),获取数据超时。(迁移到新redis环境时,运行该方法时出现了下面的异常)
 

  1. Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Unexpected end of stream.
  2. at redis.clients.util.RedisInputStream.ensureFill(RedisInputStream.java:199) ~[jedis-2.9.0.jar:?]
  3. at redis.clients.util.RedisInputStream.readByte(RedisInputStream.java:40) ~[jedis-2.9.0.jar:?]


百度了一下,出错的原因大概有下面三种情况:
1.输出缓冲区满。
2.长时间闲置连接被服务端主动断开,可以查询timeout配置的设置以及自身连接池配置是否需要做空闲检测。
3.不正常并发读写:Jedis对象同时被多个线程并发操作,可能会出现上述异常。
登录redis,查看配置

  1. CONFIG GET client-output-buffer-limit
  2. 1) "client-output-buffer-limit"
  3. 2) "normal 67108864 33554432 10 slave 4294967296 2147483648 1200 pubsub 33554432 8388608 60"
  4.              64M       32M                                                 32M      8M

normal 普通客户端
pub/sub客户端
对于slave客户端来说
硬限制 当output-buffer的大小大于4294967296 b = 4G 之后就会断开连接   (4294967296 / 1024 / 1024 / 1024)
软限制 当output-buffer的大小大于2147483648 b = 2G并且超过了1200秒的时候就会断开连接

机子连的是normal端
检查 redis config 中的 client-output-buffer-limit 配置

client-output-buffer-limit normal 0 0 0


请根据实际情况合理设置Redis输出缓冲区限制,确定不是因为缓冲区太小,导致链接关闭,进而引起 Unexpected end of stream ,可以临时都设置成 “0(关闭缓冲区限制)” 来验证此种场景。

问题到这里就解决了,输出缓存区的问题。


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/676864
推荐阅读
相关标签
  

闽ICP备14008679号