Нужен ли Redis ConnectionMultiplexer для каждой подписки на паб / подписку? - PullRequest
0 голосов
/ 20 января 2019

У меня есть настройка .Net Core Web Api, в которой я предоставляю конечную точку, которая в основном представляет собой вечный кадр. Я ограничен контрактом API, который заставляет меня выставлять его как таковой.

Этот бесконечный кадр передает данные, полученные из паба / подканала Redis. У меня будет несколько слушателей на этой конечной точке, и они в основном должны быть отдельными подписчиками на один и тот же канал.

Я использую StackExchange.Redis.

Есть одна вещь, которую я не могу обернуть, это то, как использовать ConnectionMultiplexer в этом сценарии. Везде, где я читаю об этом, мне говорят, что у меня должен быть один глобальный ConnectionMultiplexer. Но если я сделаю это, не откажусь ли я от подписки всех подписчиков, когда кто-то покидает и закрывает подписку на канал, который они все слушают?

Если я не сделаю этого, я уверен, что у меня возникнет утечка памяти.

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

Есть что-то, что я неправильно понял?

1 Ответ

0 голосов
/ 01 февраля 2019

Всегда используйте один и тот же экземпляр ConnectionMultiplexer, иначе вы потеряете преимущества от использования мультиплексора.

У меня была похожая проблема, когда при вызове отказа от подписки на канале все абоненты тоже отказались от подписки.

Если вы посмотрите на интерфейс ISubscriber, есть два способа подписаться на канал:

void Subscribe(RedisChannel channel, Action<RedisChannel, RedisValue> handler, CommandFlags flags = CommandFlags.None);
ChannelMessageQueue Subscribe(RedisChannel channel, CommandFlags flags = CommandFlags.None);

Я выбрал второй, и он решил мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...