class Redis

Public Instance Methods

lock(arg_key = nil, key: nil, interval: 1, block: true, proc: nil, locked: -> {} click to toggle source
# File lib/redis-lockex.rb, line 4
def lock(arg_key = nil, key: nil, interval: 1, block: true, proc: nil, locked: -> {}, unlocked: -> {}, expire: nil, &arg_proc)
  key ||= arg_key
  proc ||= arg_proc
  k = lock_key(key)
  if block
    sleep(interval) until lock_core(k, expire)
  else
    return false unless lock_core(k, expire)
  end
  if proc
    locked.call
    begin
      proc.call
    ensure
      unlock(key)
      unlocked.call
    end
  else
    key
  end
end
locked?(key) click to toggle source
# File lib/redis-lockex.rb, line 31
def locked?(key)
  k = lock_key(key)
  exists(k)
end
unlock(key) click to toggle source
# File lib/redis-lockex.rb, line 26
def unlock(key)
  k = lock_key(key)
  del(k)
end

Private Instance Methods

lock_core(key, expire) click to toggle source
# File lib/redis-lockex.rb, line 42
def lock_core(key, expire)
  set(key, '', nx: true, ex: expire)
end
lock_key(key) click to toggle source
# File lib/redis-lockex.rb, line 38
def lock_key(key)
  "lock:#{key}"
end