通过 resque 将 redis 用于 Rails 中的长期未决任务是否安全?

Is it safe to use redis for long-time-pending tasks in Rails via resque?

在 Rails(例如:Resque.enqueue_in(7.days, JobClass))中使用 Resque 和 resque-scheduler gem 执行长期未决任务有多安全?值得一提的是,Heroku 上的实例是 运行。掉队的几率是多少?

半持久

根据我的评论,使用 Redis(Resque 使用)的缺点是可能出现停机。

作为网络应用程序的"RAM",Redis 存储semi persistent 数据。这基本上意味着它只在运行时保留您的数据。任何停机时间都会丢失您的队列。

这是你问题的症结 -

can you afford to lose your queue?


答案只有一个,你可以回答。

但是,我会考虑许多因素:

  1. *Redis 不是一个完整的数据库...它是一个 JSON key:value 对存储。

    简而言之,这应该只用于为您提供一种在特定时间使用数据片段的简单机制。例如,我们使用 Redis 在我们的一个系统上存储用户 ID。

    这意味着如果您在 Redis 中存储 比简单 ID 或其他基础数据更多 的数据,您使用正确吗?

  2. 您的队列有多重要?

    与任何应用程序一样,您需要保留尽可能多的用户数据。

    但是,不同之处在于队列对您的系统有多重要。

    我举了酒店预订系统的例子。也许您有 "welcome" 封电子邮件需要发送,"directions" 封电子邮件来帮助客人找到酒店等等。这些 "mission critical" 吗?

    我以前设计过一个邮件营销系统。排队系统很广泛;但重要的不是 "queue" - 而是所有与之相关的关联数据。

    因此,我们将数据保存在 datatable 中,并且仅使用 Redis 来存储将要发送的内容和发送时间的纯队列。然后我们每分钟 运行 一些脚本(我忘记了细节),它们通过 Redis 队列。


最重要的是,我强烈建议将适当的数据存储在 table 中,然后只在需要时处理请求。

队列的基础是,如果它出现故障,您需要能够重建它。如果您将值单独存储在 redis 中,这将被证明是一个主要瓶颈。

命中 DB 非常值得您在长期 运行.

中从中获得的数据