Что такое Redis pubsub и как его использовать? - PullRequest
34 голосов
/ 27 июня 2011

Кто-то спросил меня, что такое PubSub и как создать канал (в комментарии от мой ответ ), и я указал ему на статью о redis.io => http://redis.io/topics/pubsub. Я так думаюдовольно ясно, но мне интересно, если у кого-нибудь есть лучшее объяснение.В идеале, четко описать это, используя redis-cli.

1 Ответ

85 голосов
/ 05 марта 2012

Опубликовать / подписаться - довольно простая парадигма.Думайте об этом, как будто вы ведете ток-шоу на радиостанции.Это опубликовано.Вы надеетесь, что по крайней мере один или несколько человек подберут ваш канал, чтобы прослушать ваши сообщения в радио-шоу (ПОДПИСАТЬСЯ), и, возможно, даже сделать что-то, но вы не общаетесь с людьми напрямую .

Давайте повеселимся с redis-cli!

redis 127.0.0.1:6379> PUBLISH myradioshow "Good morning everyone!"
(integer) 0
redis 127.0.0.1:6379> PUBLISH myradioshow "How ya'll doin tonight?"
(integer) 0
redis 127.0.0.1:6379> PUBLISH myradioshow "Hello? Is anyone listening? I'm not wearing pants."
(integer) 0

Обратите внимание, что нет клиентов, получающих сообщения на ваш канал "myradioshow" (это 0 в ответе).Никто не слушает.Теперь откройте другой redis-cli (или для более веселого времени попросите друга открыть свой redis-cli и подключитесь к вашему серверу) и ПОДПИШИТЕСЬ на канал:

redis 127.0.0.1:6379> SUBSCRIBE myradioshow
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "myradioshow"
3) (integer) 1

Вернитесь к исходному redis-cli и продолжай свое шоу:

redis 127.0.0.1:6379> PUBLISH myradioshow "Next caller gets a free loaf of bread!"
(integer) 1

Заметьте, что «1» в конце?У вас есть слушатель!Как волшебство, в вашем терминале SUBSCRIBE-d:

1) "message"
2) "myradioshow"
3) "Next caller gets a free loaf of bread!"

Конечно, в действительности вы, вероятно, захотите заняться чем-то более полезным, чем рассказывать своим клиентам о своем стиле жизни без штанов, например,как запуск событий на вашем сервере или выполнение каких-либо задач / заданий.Может быть, не так!:)

...