Подтвердить что ты не робот

Как StackExchange.Redis использует несколько конечных точек и соединений?

Как объясняется в документе StackExchange.Redis Основы, вы можете подключиться к нескольким серверам Redis, а StackExchange.Redis автоматически определит мастер /slave. Цитирование соответствующей части:

Более сложный сценарий может включать установку ведущего/ведомого; для этого использования просто укажите все нужные узлы, которые составляют этот логический уровень повтора (он автоматически идентифицирует мастер):

ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("server1:6379,server2:6379");

Я выполнил тест, в котором я вызвал переход на другой ресурс, так что мастер немного снизился, в результате старая раба стала новым мастером, а старый мастер стал новым подчиненным. Я заметил, что, несмотря на это изменение, StackExchange.Redis продолжает отправлять команды на старый мастер, в результате чего операции записи прерываются.

Вопросы по вышеперечисленному:

  • Как StackExchange.Redis определяет, какую конечную точку использовать?
  • Как следует использовать несколько конечных точек (как в приведенном выше примере)?

Я также заметил, что для каждого соединения StackExchange.Redis открывает два физических соединения, один из которых является своего рода подпиской. Для чего это точно? Используется ли он экземплярами Sentinel?

4b9b3361

Ответ 1

Что должно произойти, так это то, что он использует несколько вещей (в частности, определенную конфигурацию репликации), чтобы определить, какой из них является главным, и прямой трафик на соответствующем сервере (в соответствии с параметром "сервер", который по умолчанию "предпочитает" master ", но который всегда отправляет операции записи мастеру).

Если получена ошибка "не удается записать в ведомое устройство только для чтения" (я не могу вспомнить точный текст), она попытается восстановить конфигурацию и должна автоматически переключиться на это. К сожалению, redis не передает изменения конфигурации, поэтому библиотека не может обнаружить это раньше времени.

Обратите внимание, что если вы используете методы библиотеки для изменения мастера, он может использовать pub/sub для обнаружения этого изменения немедленно и автоматически.

Повторите второе соединение: это будет для pub/sub; он закручивает это заблаговременно, поскольку по умолчанию он пытается прослушивать широковещательные передачи конфигурации, специфичные для библиотеки.