1

将 Resque 用于 Rails 中长时间未决的任务(例如Resque.enqueue_in(7.days, JobClass):)与 resque 和 resque-scheduler gem 的安全性如何?值得一提的是,该实例正在 Heroku 上运行。丢队列的几率是多少?

4

1 回答 1

2

半持久性

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

作为 Web 应用程序的“RAM”,Redis 存储半持久性数据。这基本上意味着它仅在运行时保留您的数据。任何停机时间都会丢失您的队列。

这是你问题的症结所在——

你能承受失去你的队列吗?


答案只有你能回答的一个。

但是,我会考虑一些因素:

  1. *Redis 不是一个完整的数据库......它是一个 JSONkey:value对存储。 关键值

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

    这意味着,如果您在 Redis 中存储数据多于简单 ID 或其他基本数据,那么您是否正确使用了它?

  2. 你的队列有多重要?

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

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

    在此处输入图像描述

    我举了一个酒店预订系统的例子。也许您需要发送“欢迎”电子邮件、帮助客人找到酒店的“路线”电子邮件等。这些是“关键任务”吗?

    我之前设计过一个电子邮件营销系统。排队系统很广泛。但重要的不是“队列”——而是所有与之相关的关联数据。

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


底线是我强烈建议将适当的数据存储在表中,然后仅在需要时处理请求。

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

从长远来看,访问数据库非常值得您从中获得数据。

于 2015-10-06T10:03:20.153 回答