Class: Sidekiq::Grouping::Redis

Inherits:
Object
  • Object
show all
Defined in:
lib/sidekiq/grouping/redis.rb

Constant Summary collapse

PLUCK_SCRIPT =
<<-SCRIPT
  local pluck_values = redis.call('lrange', KEYS[1], 0, ARGV[1] - 1)
  redis.call('ltrim', KEYS[1], ARGV[1], -1)
  for k, v in pairs(pluck_values) do
    redis.call('srem', KEYS[2], v)
  end
  return pluck_values
SCRIPT

Instance Method Summary collapse

Instance Method Details

#batch_size(name) ⇒ Object



30
31
32
# File 'lib/sidekiq/grouping/redis.rb', line 30

def batch_size(name)
  redis { |conn| conn.llen(ns(name)) }
end

#batchesObject



34
35
36
# File 'lib/sidekiq/grouping/redis.rb', line 34

def batches
  redis { |conn| conn.smembers(ns('batches')) }
end

#delete(name) ⇒ Object



59
60
61
62
63
64
65
# File 'lib/sidekiq/grouping/redis.rb', line 59

def delete(name)
  redis do |conn|
    conn.del(ns("last_execution_time:#{name}"))
    conn.del(ns(name))
    conn.srem(ns('batches'), name)
  end
end

#enqueued?(name, msg) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
27
28
# File 'lib/sidekiq/grouping/redis.rb', line 24

def enqueued?(name, msg)
  redis do |conn|
    conn.sismember(unique_messages_key(name), msg)
  end
end

#get_last_execution_time(name) ⇒ Object



44
45
46
# File 'lib/sidekiq/grouping/redis.rb', line 44

def get_last_execution_time(name)
  redis { |conn| conn.get(ns("last_execution_time:#{name}")) }
end

#lock(name) ⇒ Object



52
53
54
55
56
57
# File 'lib/sidekiq/grouping/redis.rb', line 52

def lock(name)
  redis do |conn|
    id = ns("lock:#{name}")
    conn.set(id, true, nx: true, ex: Sidekiq::Grouping::Config.lock_ttl)
  end
end

#pluck(name, limit) ⇒ Object



38
39
40
41
42
# File 'lib/sidekiq/grouping/redis.rb', line 38

def pluck(name, limit)
  keys = [ns(name), unique_messages_key(name)]
  args = [limit]
  redis { |conn| conn.eval PLUCK_SCRIPT, keys, args }
end

#push_msg(name, msg, remember_unique = false) ⇒ Object



14
15
16
17
18
19
20
21
22
# File 'lib/sidekiq/grouping/redis.rb', line 14

def push_msg(name, msg, remember_unique = false)
  redis do |conn|
    conn.multi do
      conn.sadd(ns('batches'), name)
      conn.rpush(ns(name), msg)
      conn.sadd(unique_messages_key(name), msg) if remember_unique
    end
  end
end

#set_last_execution_time(name, time) ⇒ Object



48
49
50
# File 'lib/sidekiq/grouping/redis.rb', line 48

def set_last_execution_time(name, time)
  redis { |conn| conn.set(ns("last_execution_time:#{name}"), time.to_json) }
end