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發生時第一次運行。 –