PSUBSCRIBE

Тема дорожной карты · Redis

Подписки по шаблону в Redis позволяют клиентам подписываться на несколько каналов, соответствующих glob-шаблону, используя команду PSUBSCRIBE pattern [pattern ...]. Это позволяет подписчикам получать сообщения, опубликованные в каналы, которые соответствуют заданному шаблону. Например, если подписчик использует PSUBSCRIBE news.*, он будет получать сообщения, отправленные в news.sports, news.tech и любом другом канале, соответствующем шаблону news.*. Подписки по шаблону возвращают тип pmessage, который содержит три поля: совпавший шаблон, фактический канал и полезная нагрузка сообщения.

Команда PUNSUBSCRIBE позволяет удалить одну или несколько подписок по шаблону. Для получения количества активных подписок по шаблону среди всех клиентов используется команда PUBSUB NUMPAT. Подписки по шаблону в Redis являются мощным инструментом для реализации мультиарендных систем уведомлений и маршрутизации событий, где пространства имён каналов могут быть динамичными и неизвестными на момент подписки.

Как это работает

Подписки по шаблону в Redis реализуют простую модель публикации-подписки. Команда SUBSCRIBE channel позволяет слушать конкретный канал, а команда PUBLISH channel message отправляет сообщение в указанный канал. Подписчики получают сообщения в порядке их прибытия. Если подписчик не в состоянии обрабатывать сообщения в реальном времени, старые сообщения могут быть сброшены, что делает модель pub/sub "fire-and-forget".

Шаблоны в Redis используются для подписки на несколько каналов, которые соответствуют определённому шаблону. Например, команда PSUBSCRIBE channel.* подписывает клиента на все каналы, которые начинаются с channel.. Для реализации более надёжных потоков данных, которые поддерживают повторную доставку и гарантии порядка, следует использовать Redis Streams с командами XADD, XREAD и XREADGROUP.

Когда применять

Модель pub/sub в Redis особенно полезна для реализации фан-аут уведомлений, где потеря сообщений допустима. Это идеально подходит для обновлений в реальном времени, таких как обновление табло или уведомления о том, что пользователь X печатает. Однако, если важны гарантии доставки и порядок между потребителями, следует использовать Redis Streams.

Типичные ошибки

Одной из распространённых ошибок при использовании PSUBSCRIBE является попытка реализации событийного журнала на основе модели pub/sub. Модель pub/sub не поддерживает повторную доставку и хранение истории событий, что делает её непригодной для событийного журнала. Вместо этого следует использовать Redis Streams.

Другая распространённая ошибка заключается в использовании команд SUBSCRIBE и PUBLISH на том же соединении, которое также выполняет обычные команды Redis. Это недопустимо, так как соединение, находящееся в режиме подписки, не может выполнять другие команды. Также следует учитывать возможность переподключения после сбоя TCP, так как это может привести к потере всех сообщений, отправленных за время простоя.

Связанные понятия

Полезные ресурсы