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

时间:2015-10-06 09:00:45

标签: ruby-on-rails heroku resque resque-scheduler

how safe it is to use Resque for long-time-pending tasks in Rails (for example: Resque.enqueue_in(7.days, JobClass)) with resque and resque-scheduler gems? Good to mention that instance is running on Heroku. What is the chance of losing queue?

1 个答案:

答案 0 :(得分:1)

半持久性

根据我的评论,使用Redis(Resque使用的)的缺点是停机的潜力。

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

这是你问题的关键 -

  

你可以丢失队列吗?

答案只能是你能回答的答案。

然而,我会考虑很多因素:

  1. * Redis不是一个完整的数据库......它是一个JSON key:value配对商店。 Key values

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

    这意味着如果您在Redis中存储更多数据而非简单ID或其他基础数据,您是否正确使用它? < / p>

  2. 您的队列有多重要?

    与任何应用一样,您希望保留尽可能多的用户数据。

    然而,差异在于队列对您的系统的重要性。

    enter image description here

    我举了一个酒店预订系统的例子。也许你有#34;欢迎&#34;您需要发送的电子邮件,&#34;指示&#34;电子邮件,以帮助客人找到酒店,等等"mission critical"

    之前我设计了一个电子邮件营销系统。排队系统很广泛;但它并不是排队等等#34;这很重要 - 它是随之而来的所有关联数据。

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

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

    队列的基础是,如果它发生故障,您需要能够重建它。如果您仅在 redis 中存储您的值,这将成为一个主要瓶颈。

    从长远来看,点击数据库非常值得您从中获取数据。