#c# #stackexchange.redis
Вопрос:
Если у вас несколько подключений в
ConnectionMultiplexer.Connect(host1, host2, etc.)
и
StackExchange.ConnectionMultiplexer.GetServer(...)
требуется ровно 1 конечная точка для подключения сервера — как это понять ? Как это имеет смысл?
Ответ №1:
Как бы вы ни подключались, за кулисами мультиплексор может знать о нескольких экземплярах сервера redis. Обычно топология сервера — это деталь реализации, которая не полезна или не нужна потребителю, поэтому она не нужна для API, доступных в разделе GetDatabase()
; библиотека будет беспокоиться о том, как направлять команды на серверы.
Однако иногда потребитель хочет использовать API, специфичный для отдельной конечной точки сервера; именно здесь GetServer()
вступает в действие. Это может быть, например, для чтения (или изменения) отдельных конфигураций сервера (хотя существуют другие API-интерфейсы). В этом случае вам, очевидно, нужно сообщить библиотеке, с каким узлом вы хотите поговорить, поэтому этот параметр является обязательным GetServer()
. Обратите внимание, что вы можете использовать GetEndPoints()
API для отображения конечных точек в режиме воспроизведения (это не так обязательно то же самое, что и конечные точки, которые вы указали в Connect[Async]
— например, кластер redis объявляет топологию с помощью команды redis, обычно дополнительных узлов).
Если вы не уверены , к какой конечной точке вы перейдете GetServer(...)
, то есть большая вероятность, что вам не следует использовать GetServer(...)
— под этим я подразумеваю: функциональность, которую вы ищете, вероятно, доступна GetDatabase(...)
вместо этого, — что не требует указания конечной точки.
Или, может быть, проще:
GetDatabase(...)
предоставляет доступ к логической базе данных, построенной в redisGetServer(...)
раскрывает базовую инфраструктуру серверов redis, предоставляющих эту базу данных
Комментарии:
1. Спасибо за объяснение. Я проверил свой код , и единственный раз, когда мне нужно
GetServer(...)
, это сделать запрос о ключах:IServer.Keys(...)
другого способа (GetDatabase(...)
) запросить ключи нет, верно?2. @sabiland да; несмотря на то, что заманчиво думать, keys-это ориентированный на сервер API: stackexchange.github.io/StackExchange. Redis/KeysScan.html
3. Хорошо, спасибо, что прояснили это! Просто еще один быстрый вопрос, могу ли я подключить хост/порт sentinel
GetServer(...)
?4. @sabiland вы действительно разговариваете с экземпляром sentinel в качестве sentinel (а не в качестве шлюза к redis) в то время? если да… возможно, я не пробовал; если нет: нет
5. Сегодня мы устанавливаем Часовых на постановку. Перепробуем все варианты с
GetServer(...)