我使用SS 4.5.2将我的ServiceStack API从Linux / Mono(在我自己的硬件上)移动到Azure App Service。我的Redis缓存是在Linux VM上运行的3.2。我不使用Azure Redis服务。
我看到这个异常似乎是随机抛出的:
RedisException - 超时超时00:00:03
使用authenticate属性的服务似乎抛出了异常,因为每个堆栈跟踪都包含" ServiceStack.ServiceExtensions.GetSession" 和" ServiceStack。 AuthenticateAttribute.Execute" 。我目前只使用Redis进行会话存储,所以这一点并不令人意外。
我按照以下方式注册了我的ICacheClient,这已经在我以前的Linux / Mono设置中投入使用了一段时间:
container.Register<IRedisClientsManager>(c =>
new RedisManagerPool("SomeRedisMachine:6379"));
container.Register(c => c.Resolve<IRedisClientsManager>().GetCacheClient());
我确实看到了SS表单上的帖子:https://forums.servicestack.net/t/redis-exception-exceeded-timeout-of-00-00-03/2301 - 但是这只在使用Azure Redis服务时才适用,我不是。
鉴于此信息,我将有几个问题需要找到答案:
提前感谢任何见解!
更新
根据mythz的建议,我确实更新了SS v4.5.4。仍然抛出异常,但是稍微不同的消息(超出00:00:10的超时)与上述更新的超时一致。
我决定定位Azure Redis服务(而不是Linux VM)。到目前为止,我在ServiceStack 4.5.2或4.5.4中都没有看到与Redis相关的错误。也许微软用于他们自己的Redis服务的主机拥有更好的网络连接和/或更接近集群处理应用服务。
答案 0 :(得分:2)
Redis TimeoutException是一种不健康环境的症状,它阻止Redis客户端建立TCP连接。这可能是因为您的redis-server实例或网络过载或不可靠。
您可以增加超时以使Redis客户端有更多时间与以下人员建立连接:
RedisConfig.DefaultRetryTimeout = 10 * 1000;
这也是ServiceStack.Redis v4.5.4 +。
的新默认超时