gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 06:05:08 24 4
gpt4 key购买 nike

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

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

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

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

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

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

  • 等待时间很短?
  • 重新创建多路复用器? (我猜不会)
  • 调用 Close() 和 Configure()?

感谢您的指导。

最佳答案

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

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

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

关于c# - 使用 StackExchange.Redis 处理暂时性网络错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45446394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com