重新启动后与 Redis 缓存的连接失败 - Azure
Connection to Redis cache fails after restart - Azure
我们使用以下代码连接到我们的缓存(内存和 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) 部分:"Why was my client disconnected from the cache?" 它可能会在重新部署后发生。
问题是
- 重新部署后是否有恢复连接的机制
- 我们初始化连接的方式有什么问题吗
我们确定连接字符串没问题
大多数客户端(包括StackExchange.Redis)通常会在连接中断后自动连接/重新连接。但是,您的连接超时设置需要足够大才能成功重新连接。请记住,您只连接一次,因此可以给系统足够的时间以便能够重新连接。当您有大量连接或在导致 CPU 峰值后重新连接并且某些连接可能无法及时发生时,更高的连接超时特别有用。
在这种情况下,我看到 RetryTimeout 为 100。如果这是连接超时,请检查它是否以毫秒为单位。 100 毫秒太低了。您可能希望将其设置为更接近 10 秒(请记住这是一次性的事情,因此您希望给它时间以便能够连接)。
我们使用以下代码连接到我们的缓存(内存和 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) 部分:"Why was my client disconnected from the cache?" 它可能会在重新部署后发生。
问题是
- 重新部署后是否有恢复连接的机制
- 我们初始化连接的方式有什么问题吗
我们确定连接字符串没问题
大多数客户端(包括StackExchange.Redis)通常会在连接中断后自动连接/重新连接。但是,您的连接超时设置需要足够大才能成功重新连接。请记住,您只连接一次,因此可以给系统足够的时间以便能够重新连接。当您有大量连接或在导致 CPU 峰值后重新连接并且某些连接可能无法及时发生时,更高的连接超时特别有用。
在这种情况下,我看到 RetryTimeout 为 100。如果这是连接超时,请检查它是否以毫秒为单位。 100 毫秒太低了。您可能希望将其设置为更接近 10 秒(请记住这是一次性的事情,因此您希望给它时间以便能够连接)。