2012-02-09 09:15:04 -06:00
|
|
|
require 'digest'
|
|
|
|
|
2012-02-08 17:04:19 -08:00
|
|
|
module Sidekiq
|
|
|
|
module Middleware
|
|
|
|
module Client
|
|
|
|
class UniqueJobs
|
|
|
|
HASH_KEY_EXPIRATION = 30 * 60
|
|
|
|
|
|
|
|
def initialize(redis)
|
|
|
|
@redis = redis
|
|
|
|
end
|
|
|
|
|
2012-02-09 11:24:57 -06:00
|
|
|
def call(item, queue)
|
2012-02-08 17:04:19 -08:00
|
|
|
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
|
2012-02-09 09:15:04 -06:00
|
|
|
end
|