1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00
mperham--sidekiq/lib/sidekiq/middleware/client/unique_jobs.rb
2012-02-09 11:25:04 -06:00

33 lines
677 B
Ruby

require 'digest'
module Sidekiq
module Middleware
module Client
class UniqueJobs
HASH_KEY_EXPIRATION = 30 * 60
def initialize(redis)
@redis = redis
end
def call(item, queue)
payload_hash = Digest::MD5.hexdigest(MultiJson.encode(item))
return if already_scheduled?(payload_hash)
@redis.multi do
@redis.set(payload_hash, payload_hash)
@redis.expire(payload_hash, HASH_KEY_EXPIRATION)
end
yield
end
private
def already_scheduled?(payload_hash)
!!@redis.get(payload_hash)
end
end
end
end
end