我在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将刷新所创建的任何预定作业?
如果是这样的话,我能做些什么来避免这种情况吗?
答案 0 :(得分:0)
当您发送redis FLUSHALL
命令时,它会截断整个redis数据存储区。这是一件危险的事情,可能不是你想要的。
听起来你想要做的就是清除某些类型的入队作品,同时保留其他作品。您将需要刷新您正在使用的每个队列,除非您已设置其他队列,否则很可能只是default
队列:
Sidekiq::Queue.new('default').clear
这将删除redis中的队列,但会在redis中保留您的预定作业,统计信息和其他数据。