Saran awal saya adalah mutex untuk pekerjaan khusus ini. Tetapi karena ada kemungkinan Anda memiliki beberapa server aplikasi yang menjalankan tugas sidekiq, saya akan menyarankan sesuatu di tingkat redis.
Misalnya, gunakan redis-semaphore dalam definisi pekerja sidekiq Anda. Contoh yang belum teruji :
def perform
s = Redis::Semaphore.new(:map_reduce_semaphore, connection: "localhost")
# verify that this sidekiq worker is the first to reach this semaphore.
unless s.locked?
# auto-unlocks in 90 seconds. set to what is reasonable for your worker.
s.lock(90)
your_map_reduce()
s.unlock
end
end
def your_map_reduce
# ...
end