2011-10-05 1 views
17

В веб-приложении, если мне нужно записать событие в очередь, я бы сделал подключение к redis для записи события.Требуется ли redis pub/sub model для постоянных соединений для redis?

Теперь, если мне нужен другой серверный процесс (скажем, задание демона или cron), чтобы обработать или отредактировать публикацию события в redis, мне нужно постоянное соединение?

Немного смущает, как этот паб/подпроцесс работает в веб-приложении.

+0

Некоторые простые идеи (1 строка), чтобы добавить постоянство для PubSub изначально в Redis - http://abhinavsingh.com/customizing-redis-pubsub-for-message-persistence-part-2/ –

ответ

2

Я не совсем уверен, но я считаю, что да, pub/sub требует постоянного соединения.

Для альтернативы я бы заглянул в resque и как он справляется с этим. Вместо того, чтобы использовать pub/sub, он просто добавляет элемент в список в redis, а затем все задания демонов или cron могут использовать команду lpop для получения первой.

Извините, что вы дали только псевдоответ, а затем подключите вилку.

42

В основном в Redis есть две различные модели обмена сообщениями:

  • Огонь и забыть/один ко многим: Pub/Sub. Во время сообщения PUBLISH-ed все подписчики получат его, но это сообщение будет потеряно навсегда. Если клиент не был подписан, нет способа вернуть его.
  • Сохраняющиеся очереди/один к одному: списки, которые могут использоваться с такими командами блокировки, как BLPOP. В списках у вас есть продюсер, вставляющий список, а один или многие пользователи ждут элементов, но одно сообщение достигнет только одного из ожидающих клиентов. Со списками у вас есть настойчивость, и сообщения будут ждать, пока клиент вытолкнет их, а не исчезнет. Поэтому даже если никто не слушает, есть отставание (такое же большое, как и ваша доступная память, или вы можете ограничить отставание с помощью LTRIM).

Надеюсь, это ясно. Я предлагаю вам изучать следующие команды, чтобы понять больше о Redis и семантики сообщений:

  • LPUSH/RPUSH, RPOP/LPOP, BRPOP/BLPOP
  • ПУБЛИКАЦИЯ, ПОДПИСКА, PSUBSCRIBE

Doc для этого команды доступны по адресу redis.io

+0

, так что мне нужно постоянное соединение в качестве подписчика? – codecompleting

+5

С Паб/Суб, да. Посмотрите на [это] (http://blog.joshsoftware.com/2011/01/03/do-you-need-a-push-notification-manager-redis-pubsub-to-the-rescue/) для примера о том, как добиться постоянных сообщений с помощью Pub/Sub и пользовательского рубинового клиента. – cbrauchli