有效地重新安排 ActiveJob (resque/sidekiq)
Efficiently reschedule ActiveJob (resque/sidekiq)
我正在玩 Rails 4.2
应用程序,它使用 ActiveJob
支持 resque/sidekiq
进行电子邮件调度。当用户创建时事通讯活动时,将创建一个新工作并安排在特定日期。这一切都很好,但是当用户更改交货日期时会发生什么。
在这种情况下,每个作业都可以检查它是否应该交付,因此无效的作业将被忽略,只有最后一个作业会被执行。这可能有效,但如果用户进行 1k 次编辑,会将 1k-1 个无效作业推入队列 - 不好。我认为应该更新现有工作或用新工作代替。据我所知,在 Redis
队列中搜索 job_id
很慢。
在 Rails(使用 resque/sidekiq)中重新安排 ActiveJobs 的正确方法是什么?
存在 none,作业不打算重新安排。您已经回答了自己的问题:
In this case every job could check if it should be delivered or not thus invalid jobs would be ignored and only the last one would be executed.
另一种方法是重新设计发送活动的方式:将交付日期存储在数据库中,并让 cron 每分钟检查一次需要交付的活动现在并创建 Sidekiq那就工作吧。
我正在玩 Rails 4.2
应用程序,它使用 ActiveJob
支持 resque/sidekiq
进行电子邮件调度。当用户创建时事通讯活动时,将创建一个新工作并安排在特定日期。这一切都很好,但是当用户更改交货日期时会发生什么。
在这种情况下,每个作业都可以检查它是否应该交付,因此无效的作业将被忽略,只有最后一个作业会被执行。这可能有效,但如果用户进行 1k 次编辑,会将 1k-1 个无效作业推入队列 - 不好。我认为应该更新现有工作或用新工作代替。据我所知,在 Redis
队列中搜索 job_id
很慢。
在 Rails(使用 resque/sidekiq)中重新安排 ActiveJobs 的正确方法是什么?
存在 none,作业不打算重新安排。您已经回答了自己的问题:
In this case every job could check if it should be delivered or not thus invalid jobs would be ignored and only the last one would be executed.
另一种方法是重新设计发送活动的方式:将交付日期存储在数据库中,并让 cron 每分钟检查一次需要交付的活动现在并创建 Sidekiq那就工作吧。