Введение
В этой лабораторной работе вы изучите систему обмена сообщениями Pub/Sub в Redis. Вы научитесь подписываться на каналы, публиковать сообщения и отписываться. Эта лабораторная работа проведет вас через основные операции с использованием команд SUBSCRIBE, PUBLISH, UNSUBSCRIBE и PSUBSCRIBE.
Подписка на канал с помощью SUBSCRIBE
На этом шаге вы научитесь подписываться на канал в Redis с помощью команды SUBSCRIBE. Подписка на канал позволяет получать сообщения, опубликованные в этом канале. Это фундаментальное понятие в системе обмена сообщениями Pub/Sub в Redis.
Терминал 1: Подписка на канал
Откройте первый терминал (мы будем называть его Терминал 1). Вы можете использовать терминал Xfce, предоставляемый в среде LabEx.
Подключитесь к серверу Redis с помощью команды redis-cli:
redis-cli
Вы должны увидеть приглашение Redis: 127.0.0.1:6379>.
Подпишитесь на канал с именем mychannel, используя команду SUBSCRIBE:
SUBSCRIBE mychannel
Вывод будет выглядеть примерно так:
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mychannel"
3) (integer) 1
Разберем вывод:
"subscribe": Это указывает на то, что вы успешно подписались на канал."mychannel": Это имя канала, на который вы подписались.(integer) 1: Это количество каналов, на которые вы в данный момент подписаны.
Важно: Оставьте Терминал 1 открытым с активной сессией redis-cli и подпиской на канал. НЕ закрывайте этот терминал и НЕ нажимайте Ctrl+C, так как это приведет к отписке от канала. Во втором терминале мы будем публиковать сообщения на следующем шаге.
Публикация сообщений с помощью PUBLISH
На этом шаге вы научитесь публиковать сообщения в канал в Redis с помощью команды PUBLISH. Публикация сообщений является основной функцией системы Pub/Sub, позволяющей отправлять данные всем подписчикам определенного канала.
Терминал 2: Публикация сообщений
Откройте второй терминал (мы будем называть его Терминал 2). Вы можете открыть новую вкладку в вашем терминале Xfce.
Подключитесь к серверу Redis с помощью команды redis-cli:
redis-cli
Вы должны увидеть приглашение Redis: 127.0.0.1:6379>.
Теперь опубликуйте сообщение в канал mychannel, используя команду PUBLISH:
PUBLISH mychannel "Hello, Redis!"
Вывод в Терминале 2 будет представлять собой количество клиентов, получивших сообщение:
(integer) 1
В данном случае вывод (integer) 1, потому что у вас есть активная подписка на mychannel в Терминале 1 из предыдущего шага.
Наблюдение за сообщением в Терминале 1
Теперь вернитесь в Терминал 1 (где вы подписались на mychannel в Шаге 1). Вы должны увидеть опубликованное вами сообщение, отображаемое в реальном времени:
1) "message"
2) "mychannel"
3) "Hello, Redis!"
Это показывает:
"message": Указывает, что это опубликованное сообщение."mychannel": Канал, в который было опубликовано сообщение."Hello, Redis!": Фактическое содержимое сообщения.
Тестирование обмена сообщениями в реальном времени
Теперь вы можете поэкспериментировать с обменом сообщениями в реальном времени:
- Вернитесь в Терминал 2 и опубликуйте еще сообщения.
- Переключитесь на Терминал 1, чтобы увидеть их мгновенное появление.
- Попробуйте опубликовать разные сообщения, чтобы наблюдать за живым общением.
Пример — в Терминале 2:
PUBLISH mychannel "This is message 2"
PUBLISH mychannel "Real-time messaging works!"
Важно: Оставьте оба терминала, Терминал 1 и Терминал 2, с активными сессиями redis-cli. Мы продолжим использовать оба терминала на следующих шагах.
Отписка с помощью UNSUBSCRIBE
В этом шаге вы узнаете, как отписаться от канала в Redis с помощью команды UNSUBSCRIBE. Отписка удаляет клиента из списка подписчиков определенного канала, предотвращая получение им дальнейших сообщений, опубликованных в этом канале.
Терминал 1: Выход из режима подписки
Перейдите в Терминал 1 (где вы в данный момент подписаны на mychannel). Вы должны увидеть статус подписки, показывающий "Reading messages... (press Ctrl-C to quit)".
Поскольку Терминал 1 находится в режиме подписки, вы не можете напрямую выполнять обычные команды Redis. Чтобы отписаться, вам сначала нужно выйти из режима подписки:
Нажмите
Ctrl+C, чтобы выйти из режима подписки.Вы должны увидеть, что сессия redis-cli завершилась и вернулась к приглашению терминала.
Переподключитесь к Redis:
redis-cliТеперь вы можете выполнить команду
UNSUBSCRIBE(хотя это и не обязательно, поскольку отключение уже отписало вас):UNSUBSCRIBE mychannel
Примечание: Когда вы нажали Ctrl+C, вы фактически уже отключились от всех подписок. Команда UNSUBSCRIBE показана в демонстрационных целях, но на практике отключение автоматически отписывает вас от всех каналов.
Вывод в Терминале 1 будет выглядеть следующим образом:
1) "unsubscribe"
2) "mychannel"
3) (integer) 0
Разберем вывод:
"unsubscribe": Это указывает на то, что вы отписались от канала."mychannel": Это имя канала, от которого вы отписались.(integer) 0: Это количество каналов, на которые вы в данный момент подписаны. Теперь оно равно 0, потому что вы отписались отmychannel.
Терминал 2: Тестирование публикации после отписки
Теперь переключитесь на Терминал 2 и опубликуйте еще одно сообщение в mychannel:
PUBLISH mychannel "Is anyone still there?"
Вывод в Терминале 2 будет следующим:
(integer) 0
Это указывает на то, что ни один клиент не получил сообщение, потому что вы отписались от канала в Терминале 1.
Проверка отсутствия получения сообщения
Посмотрите на Терминал 1 — вы не должны увидеть появления нового сообщения, поскольку вы отписались от канала.
Это демонстрирует, как отписка от канала предотвращает получение вами дальнейших сообщений, опубликованных в этом канале, в то время как издатель по-прежнему может отправлять сообщения (но никто их не получит).
Важно: Оставьте оба терминала и их сессии redis-cli активными для следующего шага.
Подписка по шаблону с PSUBSCRIBE
На этом шаге вы научитесь подписываться на каналы, используя шаблоны, с помощью команды PSUBSCRIBE в Redis. PSUBSCRIBE позволяет подписываться на несколько каналов, соответствующих указанному шаблону. Это полезно, когда вы хотите получать сообщения из группы связанных каналов, не подписываясь на каждый из них по отдельности.
Терминал 1: Подписка по шаблону
Поскольку вы отписались от mychannel на предыдущем шаге, в Терминале 1 теперь должен отображаться обычный приглашение Redis.
В Терминале 1 подпишитесь на каналы, соответствующие шаблону news.*, используя команду PSUBSCRIBE:
PSUBSCRIBE news.*
Вывод будет выглядеть примерно так:
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.*"
3) (integer) 1
Разберем вывод:
"psubscribe": Это указывает на то, что вы успешно подписались на шаблон."news.*": Это шаблон, на который вы подписались..*является подстановочным знаком, который соответствует любым символам.(integer) 1: Это количество шаблонов, на которые вы в данный момент подписаны.
Терминал 2: Публикация в каналы, соответствующие шаблону
Перейдите в Терминал 2 и опубликуйте сообщение в канал news.sports, используя команду PUBLISH:
PUBLISH news.sports "Sports news update!"
Вывод в Терминале 2 будет представлять собой количество подписчиков, получивших сообщение:
(integer) 1
Наблюдение за совпадением шаблона
Вернитесь в Терминал 1 (где вы подписались на шаблон). Вы должны увидеть только что опубликованное сообщение:
1) "pmessage"
2) "news.*"
3) "news.sports"
4) "Sports news update!"
Это показывает:
"pmessage": Указывает, что это сообщение, соответствующее шаблону."news.*": Шаблон, который совпал."news.sports": Фактический канал, в который было опубликовано сообщение."Sports news update!": Содержимое сообщения.
Тестирование нескольких каналов
В Терминале 2 попробуйте опубликовать сообщения в разные каналы, соответствующие шаблону:
PUBLISH news.technology "New AI breakthrough!"
PUBLISH news.weather "Sunny skies ahead!"
PUBLISH sports.basketball "This won't match the pattern"
Наблюдайте в Терминале 1, что будут получены только сообщения из каналов news.*, в то время как sports.basketball не будет получен, поскольку он не соответствует шаблону news.*.
Важно: Оставьте оба терминала и их сессии redis-cli активными. Подписка по шаблону демонстрирует, как вы можете одновременно прослушивать несколько связанных каналов.
Резюме
В этой лабораторной работе вы изучили основы обмена сообщениями Redis Pub/Sub. Вы узнали, как подписываться на каналы с помощью команды SUBSCRIBE, публиковать сообщения в каналы с помощью команды PUBLISH, отписываться от каналов с помощью команды UNSUBSCRIBE и подписываться на каналы с использованием шаблонов с помощью команды PSUBSCRIBE. Эти команды необходимы для создания приложений обмена сообщениями в реальном времени с использованием Redis.


