Redis Pub/Sub
Redis Pub/Sub (pub/sub) — это модель обмена сообщениями: отправители (pub) отправляют сообщения, а подписчики (sub) получают сообщения.
Клиенты Redis могут подписываться на любое количество каналов.
На следующей диаграмме показана связь между channel1 и тремя клиентами, подписанными на этот канал — client2, client5 и client1:
Когда новое сообщение отправляется в channel1 с помощью команды PUBLISH, сообщение доставляется трём клиентам, подписанным на него:
Пример
В следующем примере показано, как работает pub/sub. Вам нужно открыть два клиента redis-cli.
В нашем примере мы создали канал подписки с именемexampleChat:
Первый клиент redis-cli
Чтение сообщений... (нажмите Ctrl-C для выхода)
1) "subscribe"
2) "exampleChat"
3) (целое число) 1
Теперь давайте перезапустим клиент Redis и затем опубликуем два сообщения в тот же канал exampleChat. Подписчик получит эти сообщения.
Второй клиент redis-cli
(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:
| Нет. | Команда и описание |
|---|---|
| 1 | PSUBSCRIBE pattern [pattern ...] Подписаться на один или несколько каналов, соответствующих заданному шаблону. |
| 2 | PUBSUB subcommand [argument [argument ...]] Просмотреть состояние системы подписки и публикации. |
| 3 | PUBLISH channel message Отправить сообщение в указанный канал. |
| 4 | PUNSUBSCRIBE [pattern [pattern ...]] Отписаться от всех каналов, соответствующих заданному шаблону. |
| 5 | SUBSCRIBE channel [channel ...] Подписаться на информацию одного или нескольких указанных каналов. |
| 6 | UNSUBSCRIBE [channel [channel ...]] Означает отписку от указанного канала (каналов). |