Redis Pub/Sub

Redis Pub/Sub (pub/sub) — это модель обмена сообщениями: отправители (pub) отправляют сообщения, а подписчики (sub) получают сообщения.

Клиенты Redis могут подписываться на любое количество каналов.

На следующей диаграмме показана связь между channel1 и тремя клиентами, подписанными на этот канал — client2, client5 и client1:

Когда новое сообщение отправляется в channel1 с помощью команды PUBLISH, сообщение доставляется трём клиентам, подписанным на него:


Пример

В следующем примере показано, как работает pub/sub. Вам нужно открыть два клиента redis-cli.

В нашем примере мы создали канал подписки с именемexampleChat:

Первый клиент redis-cli

redis 127.0.0.1:6379> SUBSCRIBE exampleChat

Чтение сообщений... (нажмите Ctrl-C для выхода)
1) "subscribe"
2) "exampleChat"
3) (целое число) 1

Теперь давайте перезапустим клиент Redis и затем опубликуем два сообщения в тот же канал exampleChat. Подписчик получит эти сообщения.

Второй клиент redis-cli

redis 127.0.0.1:6379> PUBLISH exampleChat "Redis PUBLISH test"

(integer) 1

redis 127.0.0.1:6379> PUBLISH exampleChat "Learn redis by example.com"

(integer) 1

# Клиент подписчика отобразит следующие сообщения
 1) "message"
2) "exampleChat"
3) "Redis PUBLISH test"
 1) "message"
2) "exampleChat"
3) "Learn redis by example.com"

Демонстрация GIF выглядит следующим образом:

  • Запустите локальную службу Redis и откройте два клиента redis-cli.

  • Впервом клиенте redis-cliвведитеSUBSCRIBE exampleChat, что означает подписку наexampleChatканал.

  • Вовтором клиенте redis-cliвведитеPUBLISH exampleChat "Redis PUBLISH test"Отправьте сообщение в канал exampleChat. В этот момент первый клиент redis-cli увидит тестовое сообщение, отправленное вторым клиентом redis-cli.


Команды Redis Pub/Sub

В следующей таблице перечислены распространённые команды Redis pub/sub:

Нет.Команда и описание
1PSUBSCRIBE pattern [pattern ...]
Подписаться на один или несколько каналов, соответствующих заданному шаблону.
2PUBSUB subcommand [argument [argument ...]]
Просмотреть состояние системы подписки и публикации.
3PUBLISH channel message
Отправить сообщение в указанный канал.
4PUNSUBSCRIBE [pattern [pattern ...]]
Отписаться от всех каналов, соответствующих заданному шаблону.
5SUBSCRIBE channel [channel ...]
Подписаться на информацию одного или нескольких указанных каналов.
6UNSUBSCRIBE [channel [channel ...]]
Означает отписку от указанного канала (каналов).
Другие расширения