redis
Pub / Sub
Поиск…
Вступление
Redis обеспечивает реализацию шаблона обмена публикацией / подпиской (Pub / Sub). Вместо того, чтобы отправлять сообщения конкретным приемникам, издатели отправляют сообщения заинтересованным получателям через какой-то механизм косвенности. Ресиверы задают интерес к конкретным сообщениям. В Redis эту функцию можно получить с помощью команд PUBLISH и SUBSCRIBE на каналах.
Синтаксис
- SUBSCRIBE канал [канал ...]
- UNSUBSCRIBE [канал [канал ...]]
- Сообщение канала PUBLISH
- PSUBSCRIBE pattern [pattern ...]
- PUNSUBSCRIBE [узор [узор ...]]
замечания
Чтобы обрабатывать pub / sub в redis, необходимо иметь одного клиента для подписки и другого клиента для публикации . Оба не могут обрабатываться одним клиентом. Хотя все остальные команды могут обрабатываться одним и тем же клиентом.
Опубликовать и подписаться с redis
Redis публикует / подписывается для отправки сообщений. Это осуществляется путем подписки на канал и публикацию на канал. Да, подписчики подписываются на один или несколько каналов. Издателю не нужно знать, кто все подписчики. Вместо этого издатель будет публиковать на конкретном канале. Все подписчики, подписавшиеся на этот канал, получат сообщение. Эта развязка издателей и подписчиков может обеспечить большую масштабируемость и более динамичную топологию сети.
Пример: Пользователь подписывается на 2 канала, скажем, foo & boo
SUBSCRIBE foo boo
В консоли redis-client1:
127.0.0.1:6379> SUBSCRIBE foo boo
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "foo"
3) (integer) 1
1) "subscribe"
2) "boo"
3) (integer) 2
Он начнет слушать сообщение. На публикацию будут получены данные для соответствующего канала.
Например: когда вы хотите отправить сообщение всем подписчикам, подключенным к boo, необходимо опубликовать их на этом канале.
PUBLISH boo "Hello Boo"
В консоли redis-client1:
1) "message"
2) "boo" //channel name
3) "Hello Boo" //Actual data
Чтобы отказаться от подписки на канал в любой момент, используйте
UNSUBSCRIBE // to unsubscribe from all channels
UNSUBSCRIBE foo // to unsubscribe from specific channel
Также можно подписаться на основе шаблона. Когда имя канала не обязательно / хочет подписаться на основе шаблона, используйте PSUBSCRIBE .
Аналогично отписке, основанной на шаблоне, используйте PUNSUBSCRIBE