Sha256: 1d6b87f5ce174dd8423be1919d91505c84d826e3cfa39948b791ecbc957acadf

Contents?: true

Size: 586 Bytes

Versions: 1

Compression:

Stored size: 586 Bytes

Contents

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.setex(payload_hash, HASH_KEY_EXPIRATION, 1)

          yield
        end

        private

        def already_scheduled?(payload_hash)
          !!@redis.get(payload_hash)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sidekiq-0.6.0 lib/sidekiq/middleware/client/unique_jobs.rb