Redis Sub / Pub несколько публикует одновременно - PullRequest
1 голос
/ 03 августа 2011

Если у меня есть несколько пользователей, которые публикуют канал через Redis, как это работает?Допустим, у меня есть PHP-скрипт для добавления записи в БД.2 пользователя подписались на один и тот же канал, и оба одновременно вносят запись в базу данных.Оба используют скрипт php для отправки записи в базу данных, как только это будет сделано, я затем использую php-redis для публикации на канале.Но что произойдет, если 2 или более человек делают это одновременно?Redis «блокирует» первый запрос, а затем «разблокирует» следующий запрос?

Ответы [ 2 ]

4 голосов
/ 03 августа 2011

Redis является однопоточным, поэтому одна команда должна выполняться первой, и нет необходимости в блокировке.Обычно вы не замечаете блокировку, поскольку большая часть времени, затрачиваемого на один запрос, связана с задержкой в ​​сети, а не с фактической обработкой команды.

0 голосов
/ 04 августа 2011

С практической точки зрения вы должны писать своим слушателям так, чтобы они не делали предположений относительно возможных дублирующих сообщений на любом данном канале и чтобы они не предполагали какую-либо конкретную последовательность сообщений по нескольким каналам.

Другими словами, если у вас есть несколько процессов, генерирующих сообщения для данного канала, вы не должны делать никаких предположений о том, кто из них будет отправлять данное сообщение или могут ли несколько таких издателей иметь расы и публиковать дубликаты какого-либо рода. Если вам нужна такая семантика, вам может потребоваться реализовать собственную блокировку с использованием примитивов Redis (атомарных), таких как SETNX или HSETNX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...