Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 通过resque在Rails中使用redis处理长时间挂起的任务是否安全?_Ruby On Rails_Heroku_Resque_Resque Scheduler - Fatal编程技术网

Ruby on rails 通过resque在Rails中使用redis处理长时间挂起的任务是否安全?

Ruby on rails 通过resque在Rails中使用redis处理长时间挂起的任务是否安全?,ruby-on-rails,heroku,resque,resque-scheduler,Ruby On Rails,Heroku,Resque,Resque Scheduler,对于Rails中的长时间挂起任务(例如:Resque.enqueue_in(7.days,JobClass)),使用Resque和Resque调度程序gems,使用Resque有多安全?值得一提的是,该实例正在Heroku上运行。失去队列的可能性有多大?半持久性 根据我的评论,使用Redis(Resque使用的)的缺点是潜在的停机时间 作为web应用程序的“RAM”,Redis存储数据。这基本上意味着它只在运行时保留您的数据。任何停机都会丢失您的队列 这是你问题的关键- 你能承受得起排队的损失吗

对于Rails中的长时间挂起任务(例如:
Resque.enqueue_in(7.days,JobClass)
),使用Resque和Resque调度程序gems,使用Resque有多安全?值得一提的是,该实例正在Heroku上运行。失去队列的可能性有多大?

半持久性

根据我的评论,使用Redis(Resque使用的)的缺点是潜在的停机时间

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

这是你问题的关键-

你能承受得起排队的损失吗?


答案是你唯一能回答的

不过,我会考虑若干因素:

  • *Redis不是一个完整的数据库。。。这是一个JSON对存储。

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

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

  • 您的队列有多重要?

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

    然而,不同之处在于队列对系统的重要性

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

    我以前设计过一个电子邮件营销系统。这方面的排队系统非常广泛;但重要的不是“队列”,而是伴随它而来的所有关联数据

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


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

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


    从长远来看,访问数据库是值得的。

    如果您准备将数据保存在数据库中,那么Redis的原理肯定与此类似。如果您需要再保存它们(并且无法承受队列被重置的可能性),为什么不将它们放入某种持久性存储中,如MYSQL,然后将当天的队列放入Redis?@RichPeck,是的,我正在考虑将这些作业存储在某种持久性存储中,但我怎样才能将resque队列保存到数据库中呢?用一个模型为它创建一个表,并将任何新作业保存到数据库中。然后每天,通过一个cron作业(“Heroku调度器”),您就可以将当天的作业拉到redis中。然后,Reseque将能够通过Redis工作queue@RichPeck,好的,我知道了,谢谢,但是丢失/重置redis队列的机会太大了,将作业保存到db是值得的吗?@RichPeck,thx作为回复,您可以将这些评论重写为答案,我会接受它。