使用 StackExchange.Redis 处理暂时性网络错误

Handling of transient network errors with StackExchange.Redis

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

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

我问是因为我们正在从 ServiceStack 迁移到 StackExchange 客户端。在我们正在替换的代码中,它使用了 ServiceStack,捕获了异常,并且将在短暂的 thread.sleep() 后再次尝试该操作。这种情况在我们的生产环境中经常发生,并且在大多数情况下重试都可以。

通常是 System.Net.SocketException 消息 "An established connection was aborted by the software in your host machine" 或 "An existing connection was forcibly closed by the remote host"

如果抛出 System.Net.SocketException,StackExchange.Redis 会自动重试直到 syncTimeout 时间结束吗?

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

感谢您的指导。

它不会自动重试。如果出现错误,需要自己捕获并重试。

就实际重试而言,只要多路复用器的一些连接还活着,你就可以退后重试。

如果连接失败,它会尝试 恢复,但存在一个长期存在的错误,它会间歇性地进入某种不可恢复的状态并保持断开连接。我们通过重新创建多路复用器来解决这个问题 if IsConnected ever returns false.