C# 使用StackExchange.Redis处理瞬时网络错误
正在寻找有关使用StackExchange.Redis客户端时处理临时网络问题的指导 为了澄清,我不是指最初使用ConnectionMultiplexer.Connect()连接到Redis服务器。我指的是如何处理在操作过程中因任何原因中断的连接。(我们可以假设该命令是幂等、StringSet、StringGet) 我这样问是因为我们正在从ServiceStack迁移到StackExchange客户端。在我们正在替换的使用ServiceStack的代码中,捕获了异常,并将在短线程后再次尝试该操作。sleep()。在我们的生产环境中,这种情况相当频繁,在大多数情况下,重试都会起作用 通常是System.Net.SocketException,带有消息“已建立的连接已被主机中的软件中止”或“现有连接已被远程主机强制关闭” 如果抛出System.Net.SocketException,StackExchange.Redis是否会自动重试直到syncTimeout时间过去 如果SE.Redis没有自动重试,那么在我们的代码中,在初始操作失败和重试之间是否有任何建议的步骤?例如:C# 使用StackExchange.Redis处理瞬时网络错误,c#,redis,stackexchange.redis,C#,Redis,Stackexchange.redis,正在寻找有关使用StackExchange.Redis客户端时处理临时网络问题的指导 为了澄清,我不是指最初使用ConnectionMultiplexer.Connect()连接到Redis服务器。我指的是如何处理在操作过程中因任何原因中断的连接。(我们可以假设该命令是幂等、StringSet、StringGet) 我这样问是因为我们正在从ServiceStack迁移到StackExchange客户端。在我们正在替换的使用ServiceStack的代码中,捕获了异常,并将在短线程后再次尝试该操作
- 等待一小段时间
- 重新创建多路复用器?(我想不会吧)
- 调用Close()和Configure()
谢谢您的指导。它不会自动重试。如果发生错误,您需要自己捕获并重试 就实际重试而言,只要多路复用器的某些连接仍然有效,您就可以退出并重试
如果连接失败,它会尝试恢复,但有一个长期存在的错误,它会间歇性地进入一些不可恢复的状态并保持断开连接。如果
IsConnected
返回false
感谢您的帮助建议,我们将通过重新创建多路复用器来解决此问题。你知道有一个线程提供了关于你提到的长期存在的bug的更多信息吗?github上大约有十几个重复的漏洞