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