我们正在实现一种模式,我们的客户端检查Redis中是否存在文档,如果不存在,我们将从数据库中获取数据 .
我们正在尝试处理Redis服务器关闭或无法访问的情况,以便我们可以立即从数据库中获取 .
但是,当我们通过故意取下Redis服务器测试我们的代码时,通过ServiceStack客户端对Redis的调用不会超时约20秒 .
我们尝试将RedisClient .SendTimeout属性用于各种值(1000,100,1),但超时总是在大约20秒后发生 . 我们也尝试使用.Ping()方法,但遇到了同样的问题 .
问题:我们如何处理Redis服务器关闭的情况,我们想要更快地切换到数据库提取?
2 回答
我在发送电子邮件时遇到了类似的问题:有时没有答案,内置超时(SmtpClient)什么都不做 . 最终我会得到一个超时,我相信它来自底层的TCP / IP层 . 我将客户端的超时设置为比Task.Wait上的“残酷超时”短一些 .
我的解决方案是将调用包装在一个Task中,并使用超时:
也许类似的东西对你有用,只需用一个执行Redis操作的方法替换SendEmail .
您不应该依赖redis服务器来告诉您在翻转到计划B之前请求应该等待多长时间 . 将此逻辑放在执行请求的代码中,以便它与redis服务器的设置方式无关