2012-07-04 2 views
2

У меня есть вопрос, который меня сильно раздражает. Какая функция Redis pub/sub используется для? Я могу думать только о межпроцессной коммуникации по TCP (локально или распределенной), но не более того.Redis Pub/Sub Полезность?

Может кто-то, пожалуйста, докажите, что я неправ.

+1

Что такое паб/суб, используемый для? Вещательные сообщения! –

+0

Правда. : D Я думал больше о том, как это вписывается в webapps или в другие типы IP-приложений. – stojanman

ответ

4

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

+1

Я считаю, что это также началось как способ для клиентов db получать уведомления об изменениях в просмотренных ключах. Но затем он быстро превратился в общедоступный паб/sub – jdi

0

реальный прецедент в моем опыте. Допустим, у вас есть веб-приложение, развернутое на 4 разных серверах (узлах, виртуальных машинах) в основном на вашем виртуальном частном облаке.

Веб-приложение хранит карту памяти в памяти для своего статического кеша данных, который иногда изменяется.

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

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

Использование PubSub из Redis здесь: все серверы подписаться на канал Redis и если Redis публикует сообщение, когда-либо есть обновление, добавление, удаление данных в виде сообщения на все его subscribers.On получающего объект сообщения и его тип обновления (ADD, REMOVED, UPDATED) каждый сервер обновляет свою карту памяти в памяти.

+0

. Ваши сомнения в том, как он отличается от межпроцессного взаимодействия (IPC), не отвечают. Но каждая внешняя инфраструктура, кэш, очередь внутри реализует IPC, так что вы пишете свою бизнес-логику только с использованием внешних фреймворков или кешей или очередей и т. д. –

Смежные вопросы