什么是Redis pubsub以及如何使用它?

Alf*_*red 36 publish-subscribe redis

有人问我PubSub是什么以及如何创建一个频道(在我的回答评论中)我向他指出了关于redis.io => http://redis.io/topics/pubsub的文章.我认为这很清楚,但我想知道是否有人有更好的解释.理想情况下,使用清楚地描述它redis-cli.

Aas*_*sai 87

发布/订阅是一个非常简单的范例.想想它就像你在电台播放脱口秀一样.这是PUBLISH.你希望至少有一个或多个人拿起你的频道在广播节目(SUBSCRIBE)上收听你的消息,甚至可能做一些事情,但你不是直接与人交谈.

让我们用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
Run Code Online (Sandbox Code Playgroud)

请注意,没有客户端在"myradioshow"频道上接收消息(响应中为0).没有人在听.现在,打开另一个redis-cli(或者更有趣的时候让朋友打开他们的redis-cli并连接到你的服务器)并SUBSCRIBE到频道:

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

回到原来的redis-cli并继续你的节目:

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

注意结尾的"1"?你有一个听众!像魔术一样,在你的SUBSCRIBE-d终端中:

1) "message"
2) "myradioshow"
3) "Next caller gets a free loaf of bread!"
Run Code Online (Sandbox Code Playgroud)

当然,实际上,您可能希望做的事情比告诉客户您的无裤生活方式更有用,例如在服务器上触发事件或运行某种任务/工作.也许不是!:)

  • 这些只是来自Redis的确认消息,以批量响应的形式返回,告诉您它做了什么以及它订阅了什么,1表示成功响应.见这里:http://redis.io/commands/subscribe.在我的例子中,SUBSCRIBE在初始消息发布后发生,所以他们没有收到"大家早上好!" 因为那些消息已经消失了.换句话说,SUBSCRIBE只接收在订阅后发布的已发布消息(换句话说,它不是队列). (6认同)
  • 为什么订阅者将"subscribe"和"myradioshow"作为消息而不是"大家早上好!" 等等.? (2认同)