Воссознание STACKEXCHANGE REDIS CACHE -CACHE при ошибке в методе SETASYNC?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Воссознание STACKEXCHANGE REDIS CACHE -CACHE при ошибке в методе SETASYNC?

Сообщение Anonymous »

Мы используем кэш Redis для нашего приложения Web-API. Мы используем microsoft.extensions.caching.stackexchangantis . После того, как некоторые работы были сделаны на сервере Redis, наше приложение не удалось записать в кэш: < /p>

Код: Выделить всё

"READONLY You can't write against a read only replica"
< /code>
Если я правильно понимаю, это потому, что соединение кэшируется клиентом Redis (в коде Microsoft.extensions.caching.stackexchangeredis). < /p>
setAsync метод вызывает метод onrediserror в случае ошибки: < /p>

...
catch (Exception ex)
{
OnRedisError(ex, cache);
throw;
}
...
< /code>
В методе onrediserror кэшированное соединение может быть обнаружено.private void OnRedisError(Exception exception, IDatabase cache)
{
if (_options.UseForceReconnect && (exception is RedisConnectionException or SocketException))
{
...
// wipe the shared field, but *only* if it is still the cache we were
// thinking about (once it is null, the next caller will reconnect)
var tmp = Interlocked.CompareExchange(ref _cache, null, cache);
...
}
}
< /code>
и Finilly, UseForCerConnect-< /p>
private bool? _useForceReconnect;
internal bool UseForceReconnect
{
get
{
return _useForceReconnect ??= GetDefaultValue();
static bool GetDefaultValue() =>
AppContext.TryGetSwitch("Microsoft.AspNetCore.Caching.StackExchangeRedis.UseForceReconnect", out var value) && value;
}
set => _useForceReconnect = value;
}

But it seems reconnection in case of error in the SetAsync method doesn't work by default.
Also it is written here: https://learn.microsoft.com/en-us/azure ... guidance-1

The Клиент StackexChange Redis управляет своими собственными повторными поисками, но только при установлении соединения с кэшем, когда приложение впервые начинает . Вы можете настроить тайм -аут подключения, количество попыток повторения и время между повторными поисками для установления этого соединения, но политика повторного повторного периода не применяется к операциям против кэша. Могу ли я просто включить это или это плохая идея? < /P>
Есть ли другой способ воссоздать соединение в случае ошибки? https://github.com/dotnet/aspnetcore/bl ... he.cs#l275

Подробнее здесь: https://stackoverflow.com/questions/794 ... async-meth
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»