Я запускаю ядро asp.net на веб-ферме, используя Redis в качестве хранилища для защиты данных.
мое приложение находится под большой нагрузкой, поэтому я постоянно получаю следующую ошибку от Redis:
Время ожидания выполнения EVAL, inst: 9, очередь: 1448, qu: 0, qs: 1448, qc: 0, wr: 0, wq: 0, in: 65536, ar: 0, clientName: xxxx
Способ инициализации Redis в startup.cs с использованием рекомендация Microsoft была
var redis = ConnectionMultiplexer.Connect("<URI>");
services.AddDataProtection()
.PersistKeysToRedis(redis, "DataProtection-Keys");
поэтому после прочтения некоторых статей о том, что Redis не является потокобезопасным, я изменил инициализацию Redis на потокобезопасную, как это предлагается в azure и здесь
private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() => {
return ConnectionMultiplexer.Connect("mycache.redis.cache.windows.net,abortConnect=false,ssl=true,password=...");
});
public static ConnectionMultiplexer Connection {
get {
return lazyConnection.Value;
}
}
но теперь проблема в том, что каждую секунду или около того я получаю следующие ошибки:
Токен защиты от подделки не может быть расшифрован. ---> System.Security.Cryptography.CryptographicException: Ключ {xxxxxxx} не найден в связке ключей.
or
При десериализации маркера возникло исключение.
or
Ошибка снятия защиты файла cookie сеанса.
or
System.Security.Cryptography.CryptographicException: ключ {xxxxx} не найден в связке ключей.
в чем проблема и что мне делать?
я должен снова изменить инициализацию? но тогда приложение остановится при большой нагрузке.
Обновлено
Дополнительная информация:
я случайно использовал неправильную строку подключения для Redis и снова изменил ее на правильную.
Конечно, могут быть и другие ошибки, вызывающие эту ошибку.
Как я могу обработать и смягчить эту ошибку сейчас?
Ошибка ясна, и, возможно, ее невозможно воспроизвести на другой среде разработки.
Но должен быть способ справиться с такой ошибкой.