ServiceStack.Redis Azure 超时

ServiceStack.Redis timeout on Azure

我正在使用 SS 4.5.2 将我的 ServiceStack API 从 Linux/Mono(在我自己的硬件上)移动到 Azure 应用服务。我的 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 表单上看到了 post: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 虚拟机)。到目前为止,我在 ServiceStack 4.5.2 或 4.5.4 中没有看到与 Redis 相关的错误。也许微软为自己的 Redis 服务使用的任何主机都有更好的网络连接 and/or 更接近集群处理应用程序服务。

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

您可以增加超时值,让 Redis 客户端有更多时间与以下设备建立连接:

RedisConfig.DefaultRetryTimeout = 10 * 1000;

这也是 ServiceStack.Redis v4.5.4+ 的新默认超时。