class Sidekiq::Grouping::Redis

Constants

PLUCK_SCRIPT

Public Instance Methods

batch_size(name) click to toggle source
# File lib/sidekiq/grouping/redis.rb, line 41
def batch_size(name)
  redis_call(:llen, ns(name))
end
batches() click to toggle source
# File lib/sidekiq/grouping/redis.rb, line 45
def batches
  redis_call(:smembers, ns("batches"))
end
delete(name) click to toggle source
# File lib/sidekiq/grouping/redis.rb, line 86
def delete(name)
  redis do |conn|
    redis_connection_call(conn, :del, ns("last_execution_time:#{name}"))
    redis_connection_call(conn, :del, ns(name))
    redis_connection_call(conn, :srem, ns("batches"), name)
  end
end
enqueued?(name, msg) click to toggle source
# File lib/sidekiq/grouping/redis.rb, line 34
def enqueued?(name, msg)
  member = redis_call(:sismember, unique_messages_key(name), msg)
  return member if member.is_a?(TrueClass) || member.is_a?(FalseClass)

  member != 0
end
get_last_execution_time(name) click to toggle source
# File lib/sidekiq/grouping/redis.rb, line 66
def get_last_execution_time(name)
  redis_call(:get, ns("last_execution_time:#{name}"))
end
lock(name) click to toggle source
# File lib/sidekiq/grouping/redis.rb, line 76
def lock(name)
  redis_call(
    :set,
    ns("lock:#{name}"),
    "true",
    nx: true,
    ex: Sidekiq::Grouping::Config.lock_ttl
  )
end
pluck(name, limit) click to toggle source
# File lib/sidekiq/grouping/redis.rb, line 49
def pluck(name, limit)
  if new_redis_client?
    redis_call(
      :eval,
      PLUCK_SCRIPT,
      2,
      ns(name),
      unique_messages_key(name),
      limit
    )
  else
    keys = [ns(name), unique_messages_key(name)]
    args = [limit]
    redis_call(:eval, PLUCK_SCRIPT, keys, args)
  end
end
push_msg(name, msg, remember_unique: false) click to toggle source
# File lib/sidekiq/grouping/redis.rb, line 18
def push_msg(name, msg, remember_unique: false)
  redis do |conn|
    conn.multi do |pipeline|
      sadd = pipeline.respond_to?(:sadd?) ? :sadd? : :sadd
      redis_connection_call(pipeline, sadd, ns("batches"), name)
      redis_connection_call(pipeline, :rpush, ns(name), msg)

      if remember_unique
        redis_connection_call(
          pipeline, sadd, unique_messages_key(name), msg
        )
      end
    end
  end
end
set_last_execution_time(name, time) click to toggle source
# File lib/sidekiq/grouping/redis.rb, line 70
def set_last_execution_time(name, time)
  redis_call(
    :set, ns("last_execution_time:#{name}"), time.to_json
  )
end

Private Instance Methods

ns(key = nil) click to toggle source
# File lib/sidekiq/grouping/redis.rb, line 100
def ns(key = nil)
  "batching:#{key}"
end
unique_messages_key(name) click to toggle source
# File lib/sidekiq/grouping/redis.rb, line 96
def unique_messages_key(name)
  ns("#{name}:unique_messages")
end