Я создаю приложение стиля Tinder, где пользователи могут прокручивать события.Rails & Sidekiq: Confused about 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-минутном окне?
В основном моя цель - сократить количество фоновых заданий. Допустим, у меня в настоящее время 1 работа, работающая каждую минуту в течение 5 минут. Без отладки он будет запускать 5 заданий (каждые 60 секунд). * С * debouncing, будет ли он также запускать 5 заданий (каждые 5 минут)? Или он будет запускать 1 работу (каждые 5 минут, объединяя 5 заданий в 1)? –
Посмотрите на этот код. При определенных условиях будет выполняться 0 заданий. Потому что при каждом вызове он будет перенесен на +5 минут. Таким образом, он будет запускаться в первый раз только тогда, когда следующий вызов произойдет на +5.01. –