重新启动后,与Redis缓存的连接失败 - Azure

时间:2017-10-16 11:05:17

标签: azure redis azure-redis-cache redis-cache cachemanager

我们使用以下代码连接到我们的缓存(内存和Redis):

settings .WithSystemRuntimeCacheHandle() .WithExpiration(CacheManager.Core.ExpirationMode.Absolute, defaultExpiryTime) .And .WithRedisConfiguration(CacheManagerRedisConfigurationKey, connectionString) .WithMaxRetries(3) .WithRetryTimeout(100) .WithJsonSerializer() .WithRedisBackplane(CacheManagerRedisConfigurationKey) .WithRedisCacheHandle(CacheManagerRedisConfigurationKey, true) .WithExpiration(CacheManager.Core.ExpirationMode.Absolute, defaultExpiryTime);

它工作正常,但有时机器重新启动(我们托管它的Azure自动重启),并且重启后连接到Redis失败并出现以下异常:

Connection to '{connection string}' failed. at CacheManager.Core.BaseCacheManager`1..ctor(String name, ICacheManagerConfiguration configuration) at CacheManager.Core.BaseCacheManager`1..ctor(ICacheManagerConfiguration configuration) at CacheManager.Core.CacheFactory.Build[TCacheValue](String cacheName, Action`1 settings) at CacheManager.Core.CacheFactory.Build(Action`1 settings)

根据Redis常见问题解答(https://docs.microsoft.com/en-us/azure/redis-cache/cache-faq)部分:“为什么我的客户端与缓存断开连接?”重新部署后可能会发生这种情况。

问题是

  • 有任何机制可以在重新部署后恢复连接
  • 我们初始化连接的方式有任何不妥之处

我们确定连接字符串正常

1 个答案:

答案 0 :(得分:1)

大多数客户端(包括StackExchange.Redis)通常在连接中断后自动连接/重新连接。但是,您的连接超时设置需要足够大才能成功重新连接。请记住,您只需连接一次,因此可以给系统足够的时间来重新连接。当连接突发或重新连接突然导致CPU出现峰值并且某些连接可能不会及时发生时,更高的连接超时特别有用。

在这种情况下,我看到RetryTimeout为100.如果这是连接超时,请检查这是否以毫秒为单位。 100毫秒太低了。你可能想让它更像10秒(记住它是一次性的事情,所以你想给它时间来连接)。