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?
答案 0 :(得分:1)
半持久性
根据我的评论,使用Redis(Resque使用的)的缺点是停机的潜力。
作为网络应用的" RAM" ,Redis存储semi persistent数据。这基本上意味着它只在运行时保留您的数据。任何停机都会丢失您的队列。
这是你问题的关键 -
你可以丢失队列吗?
答案只能是你能回答的答案。
然而,我会考虑很多因素:
* Redis不是一个完整的数据库......它是一个JSON key:value
配对商店。
简而言之,这只应该用于为您提供一种在特定时间使用数据片段的简单机制。作为示例,我们使用Redis在我们的一个系统上存储用户的ID。
这意味着如果您在Redis中存储更多数据而非简单ID或其他基础数据,您是否正确使用它? < / p>
您的队列有多重要?
与任何应用一样,您希望保留尽可能多的用户数据。
然而,差异在于队列对您的系统的重要性。
我举了一个酒店预订系统的例子。也许你有#34;欢迎&#34;您需要发送的电子邮件,&#34;指示&#34;电子邮件,以帮助客人找到酒店,等等"mission critical"?
之前我设计了一个电子邮件营销系统。排队系统很广泛;但它并不是排队等等#34;这很重要 - 它是随之而来的所有关联数据。
因此,我们将数据保存在数据表中,并且仅使用Redis存储将要发送的内容的纯队列,以及何时发送。然后我们每分钟都运行一些脚本(我已经忘记了具体内容),这些脚本经过了Redis队列。
最重要的是,我强烈建议将适当的数据存储在表中,然后只在需要时处理请求。
队列的基础是,如果它发生故障,您需要能够重建它。如果您仅在 redis 中存储您的值,这将成为一个主要瓶颈。
从长远来看,点击数据库非常值得您从中获取数据。