redis pub/sub 模型是否需要持久连接到 redis?

发布于 2024-12-08 13:45:46 字数 162 浏览 0 评论 0原文

在 Web 应用程序中,如果我需要将事件写入队列,我将连接到 Redis 来写入事件。

现在,如果我想要另一个后端进程(例如守护进程或 cron 作业)来处理或响应 redis 中的事件发布,我是否需要持久连接?

对于这个发布/订阅流程在 Web 应用程序中的工作原理不太困惑。

In a web application, if I need to write an event to a queue, I would make a connection to redis to write the event.

Now if I want another backend process (say a daemon or cron job) to process the or react the the publishing of the event in redis, do I need a persistant connection?

Little confused on how this pub/sub process works in a web application.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

若相惜即相离 2024-12-15 13:45:46

基本上,Redis 有两种不同的消息传递模型:

  • Fire and Forget / 一对多:Pub/Sub。当消息被发布时,所有订阅者都会收到它,但该消息将永远丢失。如果客户没有订阅,则无法取回。
  • 持久队列/一对一:列表,可能与阻塞命令(例如 BLPOP)一起使用。对于列表,您有一个生产者推入列表,一个或多个消费者等待元素,但一条消息只会到达一个等待的客户端。使用列表,您可以持久化,并且消息将等待客户端弹出它们而不是消失。因此,即使没有人在听,也会有积压(与您的可用内存一样大,或者您可以使用 LTRIM 限制积压)。

我希望这一点很清楚。我建议您学习以下命令以了解有关 Redis 和消息传递语义的更多信息:

  • LPUSH/RPUSH、RPOP/LPOP、BRPOP/BLPOP
  • PUBLISH、SUBSCRIBE、PSUBSCRIBE

有关此命令的文档可在 redis.io 上找到

Basically in Redis there are two different messaging models:

  • Fire and Forget / One to Many: Pub/Sub. At the time a message is PUBLISH-ed all the subscribers will receive it, but this message is then lost forever. If a client was not subscribed there is no way it can get it back.
  • Persisting Queues / One to One: Lists, possibly used with blocking commands such as BLPOP. With lists you have a producer pushing into a list, and one or many consumers waiting for elements, but one message will reach only one of the waiting clients. With lists you have persistence, and messages will wait for a client to pop them instead of disappearing. So even if no one is listening there is a backlog (as big as your available memory, or you can limit the backlog using LTRIM).

I hope this is clear. I suggest you studying the following commands to understand more about Redis and messaging semantics:

  • LPUSH/RPUSH, RPOP/LPOP, BRPOP/BLPOP
  • PUBLISH, SUBSCRIBE, PSUBSCRIBE

Doc for this commands is available at redis.io

荆棘i 2024-12-15 13:45:46

我不完全确定,但我相信,是的,发布/订阅需要持久连接。

作为替代方案,我会看看 resque 以及它是如何处理的。它不使用 pub/sub,而是简单地将一个项目添加到 redis 中的列表中,然后您拥有的任何守护程序或 cron 作业都可以使用 lpop 命令来获取第一个项目。

抱歉只给出一个伪答案然后一个插头。

I'm not totally sure, but I believe that yes, pub/sub requires a persistent connection.

For an alternative I would take a peek at resque and how it handles that. Instead of using pub/sub it simply adds an item to a list in redis, and then whatever daemon or cron job you have can use the lpop command to get the first one.

Sorry for only giving a pseudo answer and then a plug.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文