在使用StackExchange.Redis客户端时,寻求有关处理临时网络问题的指导。
为了澄清起见,我并不是要首先使用ConnectionMultiplexer.Connect()连接到Redis服务器。我指的是在操作中间如何处理由于任何原因而中断的连接。(我们可以假设该命令是幂等的,StringSet,StringGet)
我问是因为我们正在从ServiceStack迁移到StackExchange客户端。在我们要替换的使用ServiceStack的代码中,捕获了异常,在短暂的thread.sleep()之后将再次尝试该操作。这在我们的生产环境中经常发生,并且在大多数情况下重试是可行的。
通常是System.Net.SocketException,消息为“主机中的软件中止了已建立的连接”或“远程主机强行关闭了现有连接”
如果抛出System.Net.SocketException,StackExchange.Redis是否会自动重试直到syncTimeout时间过去?
如果SE.Redis没有自动重试,那么在我们的代码中,在初始操作失败和重试之间应该采取任何建议的步骤吗?如:
感谢您的指导。
它不会自动重试。如果发生错误,则需要捕获并重试。
就实际重试而言,只要某些多路复用器的连接仍然有效,您就可以退后再试。
如果连接失败,它将 尝试 恢复,但是存在一个长期存在的错误,在该错误中,它可能会间歇性地进入某些不可恢复的状态并保持断开连接。如果有IsConnected返回,我们将通过重新创建多路复用器来解决此问题false。
IsConnected
false