sidekiq - 避免清除delayed_until作业

时间:2013-11-27 16:54:15

标签: ruby sidekiq

我在heroku上运行sidekiq,可以与用户的电子邮件等进行大量同步。

我们经常遇到以下错误:

Error R14 (Memory quota exceeded)

为了解决这个问题,我创建了一个由heroku调度程序执行的rake任务。

rake任务重新启动所有dynos并使用以下代码刷新redis中的所有sidekiq作业:

Sidekiq.redis { |r| r.flushall }

我有一项新要求,即用户希望将来安排某些作业运行,如下所示:

DeliverEmail.delay_until(email.send_time).perform_async(email.id)

我是否正确地说上述代码示例中的flushall将刷新所创建的任何预定作业?

如果是这样的话,我能做些什么来避免这种情况吗?

1 个答案:

答案 0 :(得分:0)

当您发送redis FLUSHALL命令时,它会截断整个redis数据存储区。这是一件危险的事情,可能不是你想要的。

听起来你想要做的就是清除某些类型的入队作品,同时保留其他作品。您将需要刷新您正在使用的每个队列,除非您已设置其他队列,否则很可能只是default队列:

Sidekiq::Queue.new('default').clear

这将删除redis中的队列,但会在redis中保留您的预定作业,统计信息和其他数据。