Что такое Redis pubsub и как его использовать?

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


person Alfred    schedule 26.06.2011    source источник


Ответы (1)


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

Давайте повеселимся с 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

Обратите внимание, что нет клиентов, получающих сообщения на вашем канале «myradiohow» (это 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!"

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

person Aashay Desai    schedule 05.03.2012
comment
Почему подписчик получает в сообщениях подписку и myradiohow вместо Доброго утра всем! и т.д.? - person bcoughlan; 10.11.2012
comment
Это просто подтверждающие сообщения от Redis в виде массового ответа, сообщающие вам, что он сделал и на что подписался, а 1 указывает на успешный ответ. См. здесь: redis.io/commands/subscribe. В моем примере ПОДПИСКА происходит после того, как первоначальные сообщения были опубликованы, поэтому они не получают Доброе утро всем! и т. д., потому что эти сообщения уже ушли. Другими словами, SUBSCRIBE получает только те опубликованные сообщения, которые опубликованы после подписки (другими словами, это не очередь). - person Aashay Desai; 14.11.2012
comment
@AashayDesai был бы полезен распространенный сценарий, когда кто-то хочет / должен использовать публикацию и подписку. - person kentor; 15.05.2017