У меня 2 услуги. Им обоим нужно подписаться на один и тот же канал.
Две службы сбалансированы по нагрузке. Каждая служба работает на нескольких серверах.
Итак, как я могу быть уверен, что только 1 экземпляр каждой службы потребляет сообщение этого канала.
Поддерживается ли это в Redis?
Благодарность
3 ответа
Pubsub так не работает - сообщение отправляется всем подключенным подписанным клиентам. Однако вы можете настроить его так, чтобы канал отображал уведомление об обновлении списка. Таким образом, все клиенты получат сообщение, но только один сможет взять элемент из списка с помощью LPOP.
Другой подход - использовать B*POP
из ваших экземпляров службы. Если у вас много клиентов, работающих со списком B*POP
, при каждом обращении к нему LPUSH
один из этих клиентов получит данные, но только один.
Вам нужно использовать Redis Streams с XREADGROUP, это новая функция Redis.
https://redis.io/topics/streams-intro
Похожие вопросы
Новые вопросы
redis
Redis - это хранилище структуры данных в памяти с открытым исходным кодом (по лицензии BSD), используемое в качестве базы данных, кэша и посредника сообщений. Он поддерживает структуры данных, такие как строки, хэши, списки, наборы, отсортированные наборы с запросами диапазона, растровые изображения, гиперлогоги, геопространственные индексы с запросами радиуса и потоками. Он также предоставляет возможности паб-саб. Используйте этот тег для вопросов, связанных с Redis и системой памяти.