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

Posted

技术标签:

【中文标题】什么是 Redis pubsub 以及如何使用它?【英文标题】:What is Redis pubsub and how do I use it? 【发布时间】:2011-09-23 03:55:17 【问题描述】:

有人问我 PubSub 是什么以及如何创建频道(来自 my answer 的评论),我将他指向 redis.io 上的文章 => http://redis.io/topics/pubsub。我认为这很清楚,但我想知道是否有人有更好的解释。理想情况下,使用redis-cli 清楚地描述它。

【问题讨论】:

【参考方案1】:

发布/订阅是一个非常简单的范例。把它想象成你在广播电台上运行脱口秀节目。那是发布。您希望至少有一个或多个人会选择您的频道来收听您在广播节目 (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

请注意,没有客户端在您的“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!"

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

【讨论】:

为什么订阅者收到“subscribe”和“myradioshow”作为消息,而不是“大家早上好!”等等? 那些只是从 Redis 以批量响应的形式返回的确认消息,告诉你它做了什么以及它订阅了什么,1 表示响应成功。见这里:redis.io/commands/subscribe。在我的示例中,订阅发生在初始消息发布之后,因此他们不会收到“大家早上好!”等等,因为这些消息已经消失了。换句话说,SUBSCRIBE 只接收在订阅 之后发布的已发布消息(也就是说,它不是一个队列)。 @AashayDesai 一个常见的场景,当人们想要/需要使用发布和订阅时会有帮助

以上是关于什么是 Redis pubsub 以及如何使用它?的主要内容,如果未能解决你的问题,请参考以下文章

Scala Redis 中的 PubSub

为啥使用 PUBSUB 订阅时无法 PING?

Redis Pubsub命令用法

Golang 的稳定 GCP PubSub API

Redis Pub/Sub 发布订阅模式的深度解析与实现消息队列

ruby redis_pubsub_demo.rb