Azure

时间:2016-12-08 17:07:47

标签: azure caching redis servicestack servicestack.redis

我使用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服务时才适用,我不是。

鉴于此信息,我将有几个问题需要找到答案:

  • 将Redis VM移至更高级别会对其产生任何积极影响 这个?目前,VM是最小的VM之一。我今天会试试这个。 更新:增加VM大小似乎无法解决问题。
  • Redis VM与App Service之间的延迟是否太大?我无法想象这是一个问题,因为它们位于同一个数据中心内。
  • 我需要考虑Linux / Mono和Azure App Service(Windows,可能是由某种修改过的IIS支持)之间的一些细微差别吗?

提前感谢任何见解!

更新

根据mythz的建议,我确实更新了SS v4.5.4。仍然抛出异常,但是稍微不同的消息(超出00:00:10的超时)与上述更新的超时一致。

我决定定位Azure Redis服务(而不是Linux VM)。到目前为止,我在ServiceStack 4.5.2或4.5.4中都没有看到与Redis相关的错误。也许微软用于他们自己的Redis服务的主机拥有更好的网络连接和/或更接近集群处理应用服务。

1 个答案:

答案 0 :(得分:2)

Redis TimeoutException是一种不健康环境的症状,它阻止Redis客户端建立TCP连接。这可能是因为您的redis-server实例或网络过载或不可靠。

您可以增加超时以使Redis客户端有更多时间与以下人员建立连接:

RedisConfig.DefaultRetryTimeout = 10 * 1000;

这也是ServiceStack.Redis v4.5.4 +。

的新默认超时