Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用StackExchange.Redis处理瞬时网络错误_C#_Redis_Stackexchange.redis - Fatal编程技术网

C# 使用StackExchange.Redis处理瞬时网络错误

C# 使用StackExchange.Redis处理瞬时网络错误,c#,redis,stackexchange.redis,C#,Redis,Stackexchange.redis,正在寻找有关使用StackExchange.Redis客户端时处理临时网络问题的指导 为了澄清,我不是指最初使用ConnectionMultiplexer.Connect()连接到Redis服务器。我指的是如何处理在操作过程中因任何原因中断的连接。(我们可以假设该命令是幂等、StringSet、StringGet) 我这样问是因为我们正在从ServiceStack迁移到StackExchange客户端。在我们正在替换的使用ServiceStack的代码中,捕获了异常,并将在短线程后再次尝试该操作

正在寻找有关使用StackExchange.Redis客户端时处理临时网络问题的指导

为了澄清,我不是指最初使用ConnectionMultiplexer.Connect()连接到Redis服务器。我指的是如何处理在操作过程中因任何原因中断的连接。(我们可以假设该命令是幂等、StringSet、StringGet)

我这样问是因为我们正在从ServiceStack迁移到StackExchange客户端。在我们正在替换的使用ServiceStack的代码中,捕获了异常,并将在短线程后再次尝试该操作。sleep()。在我们的生产环境中,这种情况相当频繁,在大多数情况下,重试都会起作用

通常是System.Net.SocketException,带有消息“已建立的连接已被主机中的软件中止”或“现有连接已被远程主机强制关闭”

如果抛出System.Net.SocketException,StackExchange.Redis是否会自动重试直到syncTimeout时间过去

如果SE.Redis没有自动重试,那么在我们的代码中,在初始操作失败和重试之间是否有任何建议的步骤?例如:

  • 等待一小段时间
  • 重新创建多路复用器?(我想不会吧)
  • 调用Close()和Configure()

谢谢您的指导。

它不会自动重试。如果发生错误,您需要自己捕获并重试

就实际重试而言,只要多路复用器的某些连接仍然有效,您就可以退出并重试


如果连接失败,它会尝试恢复,但有一个长期存在的错误,它会间歇性地进入一些不可恢复的状态并保持断开连接。如果
IsConnected
返回
false

感谢您的帮助建议,我们将通过重新创建多路复用器来解决此问题。你知道有一个线程提供了关于你提到的长期存在的bug的更多信息吗?github上大约有十几个重复的漏洞