使用Csredis客户端时出现Unexpected end of stream异常
# 问题描述
使用Csredis客户端时,出现:System.IO.EndOfStreamException: Unexpected end of stream; expected type 'Bulk' 异常。
这种情况一般是连接出现了异常,未能做好异常处理,并且使用该异常的链接去读取数据,返回的数据不符合预期结果,抛出的错误。
# 解决方案
出现以上异常可以尝试通过以下方法解决:
方法1
增加参数设置
tryit=1,即出错重试。重试之前会关闭socket物理连接,然后重新尝试连接。将方法2
将timeout的值设置为0,0表示不设置Redis的超时时间,即服务端不会主动断开连接。云数据库Redis默认提供代理模式连接,代理与Redis之间没有设置超时时间,客户端与代理之间的超时时间通过client-timeout参数控制。如果通过代理连接,您可以控制台 (opens new window),在参数配置页面设置client-timeout参数运行值为0,操作步骤请参见参数配置。如果使用直连访问,由于timeout的值已默认设置为0,因此您可以忽略此操作。
关于处理该异常的方法, 众多网友也积极讨论并分享意见,详情参见GitHub社区 (opens new window)。