mirror of
https://github.com/mperham/sidekiq.git
synced 2022-11-09 13:52:34 -05:00
33 lines
677 B
Ruby
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
|