Как правильно поддерживать объект ConnectionMultiplexer в StackExchange.Redis?
Я храню ConnectionMultiplexer
статический объект на веб-сайте ASP.NET MVC получает ~500req/ сек, которые попадают в экземпляр Redis на RedisLabs. Время от времени я вижу ошибки, говорящие SocketFailure on EVAL
и увеличенное количество соединений на панели инструментов RedisLabs. Должен ли я избавиться от старого ConnectionMultiplexer
экземпляр и воссоздать новый или попытаться восстановить вручную после этих исключений?
1 ответ
Система должна попытаться восстановить соединение автоматически. То, что он не делает, - это повторяет ваши команды, потому что у него нет возможности узнать, что делалось и не было выполнено на сервере (потому что: сокет не удался; для всех, кого он знает, ответ "ok" мог быть уже отправлен redis).
Таким образом, вам не нужно избавляться / повторно подключаться. Вы можете отслеживать сбой / переподключение соединения через события, опубликованные в экземпляре мультиплексора. Вы также можете использовать .IsConnected()
метод для базы данных (для целей нацеливания на сервер требуется ключ, но если вы говорите только с одним сервером, вы можете передать в качестве ключа все что угодно).