Redis可靠队列模式

标签 redis message-queue

http://redis.io/commands/rpoplpush

“RPOPLPUSH(或阻塞变体的 BRPOPLPUSH)提供了一种避免此问题的方法:消费者获取消息并同时将其推送到处理列表中。它将使用 LREM 命令删除消息消息处理完毕后从处理列表中删除。”

推荐使用这种可靠的队列模式。这里的关键是从队列中删除项目,除非进程完成。但是我最大的困惑是为什么这里需要处理队列?通过只保留一个队列可以实现相同的目标。

最佳答案

当您有多个任务访问队列时会出现此问题,这种情况很可能会发生。如果您将它留在队列中,您将面临另一个任务拾取它并复制消息的风险。为了解决这个问题并具有可靠性,您可以使用 RPOPLPUSH,这会将消息从主队列中取出,将其推送到辅助队列中,并为任务提供消息以执行任务想要执行的任何操作。现在可能会出现一个次要任务并且可以访问主队列而不用担心重复。

最后,当第一个任务完成时,它可以 LREM 并从处理队列中删除消息,从而完成其工作。任何任务都会重复此过程,您可以为所有任务实现一个处理队列,或者为每个任务实现一个单独的处理队列,这取决于您的用例。

关于Redis可靠队列模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38341731/

相关文章:

redis - 使用 multi 是否会伤害 redis 可靠的队列性能

multithreading - 我可以使用 Boost 消息队列进行线程通信吗

redis - ZREVRANK 'fair' 在REDIS中的排名

php - 如何使用类函数和初始化文件获取redis键值

redis - 这可以用于redis吗

socket.io - 为什么你需要一个消息队列来与网络套接字聊天?

redis - 设计应用程序时如何使列表可靠?

node.js - Node 和 Redis 队列

java - 消息消费后出现错误,如何将消息保存在JMS Message Queue中?

java - JMS Receive 如何在内部工作?