Как правильно поддерживать объект ConnectionMultiplexer в StackExchange.Redis?

Я храню ConnectionMultiplexer статический объект на веб-сайте ASP.NET MVC получает ~500req/ сек, которые попадают в экземпляр Redis на RedisLabs. Время от времени я вижу ошибки, говорящие SocketFailure on EVAL и увеличенное количество соединений на панели инструментов RedisLabs. Должен ли я избавиться от старого ConnectionMultiplexer экземпляр и воссоздать новый или попытаться восстановить вручную после этих исключений?

1 ответ

Решение

Система должна попытаться восстановить соединение автоматически. То, что он не делает, - это повторяет ваши команды, потому что у него нет возможности узнать, что делалось и не было выполнено на сервере (потому что: сокет не удался; для всех, кого он знает, ответ "ok" мог быть уже отправлен redis).

Таким образом, вам не нужно избавляться / повторно подключаться. Вы можете отслеживать сбой / переподключение соединения через события, опубликованные в экземпляре мультиплексора. Вы также можете использовать .IsConnected() метод для базы данных (для целей нацеливания на сервер требуется ключ, но если вы говорите только с одним сервером, вы можете передать в качестве ключа все что угодно).

Другие вопросы по тегам