Đề xuất ban đầu của tôi sẽ là một mutex cho công việc cụ thể này. Nhưng có khả năng bạn có nhiều máy chủ ứng dụng làm việc với các công việc sidekiq, tôi sẽ đề xuất một cái gì đó ở cấp redis.
Ví dụ:sử dụng redis-semaphore trong định nghĩa nhân viên sidekiq của bạn. Một ví dụ chưa được thử nghiệm :
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