0
我在构建一个Tinder风格的应用程序,用户可以通过事件轻扫。Rails&Sidekiq:对Debounce感到困惑
目前,我有一个后台作业,在用户滑动事件时被触发。随着用户通过刷卡每分钟20个事件,我创建一吨的后台作业:
worker.rb
class Worker
include Sidekiq::Worker
def perform(user_id, newly_voted_event_id)
user = User.find(user_id)
event = Event.find(newly_voted_event_id)
events_to_rerank = event.similar.unvoted(user_id)
events_to_rerank.each do |e|
e.rank(user_id)
end
end
end
User.rb:
def recalculate_similar_events(event_id)
CalculateRelevantEventRankingsForUser.perform_async(self.id, event_id)
end
我想怎么办每个用户每5分钟运行一次最多一个后台作业。所以,我会用我的sidekiq-debounce
后台作业更改为:
def recalculate_similar_events(event_id)
CalculateRelevantEventRankingsForUser.perform_in(5.minutes, self.id, event_id)
end
我感到困惑的宝石做什么。它是在5分钟内自动执行所有工作作为一项工作还是仅在每个5分钟窗口中执行第一项工作?
基本上我的目标是减少后台作业的数量。假设我目前有5分钟的每分钟运行1项工作。如果不剔除,它将运行5个工作(每60秒)。 *随着* debounce,它也会运行5个工作(每5分钟)?或者它会运行1份工作(每5分钟将5份工作合并为1份)? –
看看这段代码。在定义的条件下,将有0个作业正在运行。因为每次通话都会在5分钟后重新安排时间。所以它只会在下一次电话会在+5.01发生时第一次运行。 –