Настройка Redis
- ElastiCache Redis
- Кластеризация
- SSL
- Версия 3.2.6
- Redis AUTH = Да
Клиент
- C #. Консольное приложение .Net Core
- StackExchange.Redis: 2.0.601
Иногда к нашему экземпляру Redis для ElastiCache применяются обновления AWS. Когда применяются эти обновления, все наши клиенты, использующие библиотеку StackExchance.Redis, начинают получать «StackExchange.Redis.RedisServerException: требуется проверка подлинности NOAUTH». ошибки. Мы должны перезапустить клиентов, и тогда все работает нормально.
Нам не удалось продублировать эту проблему за пределами обновления службы ElastiCache.
Вещи, которые мы пытались продублировать:
- Выключите Redis и перезапустите его
- Обновите версию
- Измените настройки SSL вперед и назад
Во всех этих случаях локальный клиент переподключался без проблем.
Мы не знаем, как продублировать эту проблему и как решить эту проблему. У меня была одна мысль - создать сердцебиение внутри каждого клиента, чтобы попытаться подключиться и прочитать ключ, если он потерпит неудачу, а затем восстановить соединение с Redis, но мы слепы, поскольку не можем дублировать его по требованию. Любая помощь будет принята с благодарностью.
Наш конструктор провайдера Redis
public RedisProvider(RedisConnectionSettings connectionSettings, ILogger logger)
{
options = new ConfigurationOptions()
{
Ssl = connectionSettings.SslEnabled,
DefaultDatabase = connectionSettings.Database,
Password = connectionSettings.Password,
EndPoints = { connectionSettings.Connection }
};
try
{
connectionMultiplexer = ConnectionMultiplexer.Connect(options);
}
catch (Exception ex)
{
logger.Error(ex.Message);
}
keysPrefix = $"{connectionSettings.KeyPrefix}:{_redisApplicationName}";
}
Наш метод получения базы данных Redis, используемой при каждом вызове Redis
private IDatabase GetRedisDataBase()
{
if (connectionMultiplexer == null)
{
connectionMultiplexer = ConnectionMultiplexer.Connect(options);
}
var redisDatabase = connectionMultiplexer.GetDatabase();
return redisDatabase;
}