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 服务,而我不是。
鉴于此信息,我必须找到几个问题的答案:
- 将 Redis VM 移动到更高层对
这个?目前,VM 是最小的可用虚拟机之一。我今天会试试这个。 更新:增加 VM 大小似乎无法解决问题。
- Redis VM 和应用服务之间的延迟是否太大?我无法想象这是一个问题,因为它们在同一个数据中心内。
- 我需要考虑 Linux/Mono 和 Azure 应用服务(Windows,大概由某种修改过的 IIS 支持)之间的细微差别吗?
提前感谢您的任何见解!
更新
根据 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+ 的新默认超时。
我正在使用 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 服务,而我不是。
鉴于此信息,我必须找到几个问题的答案:
- 将 Redis VM 移动到更高层对 这个?目前,VM 是最小的可用虚拟机之一。我今天会试试这个。 更新:增加 VM 大小似乎无法解决问题。
- Redis VM 和应用服务之间的延迟是否太大?我无法想象这是一个问题,因为它们在同一个数据中心内。
- 我需要考虑 Linux/Mono 和 Azure 应用服务(Windows,大概由某种修改过的 IIS 支持)之间的细微差别吗?
提前感谢您的任何见解!
更新
根据 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+ 的新默认超时。