class DLM

Public Class Methods

new(redis=Redis.new) click to toggle source
# File lib/dlm.rb, line 7
def initialize(redis=Redis.new)
  @redis = redis
end

Public Instance Methods

lock(what, block = false, lockinfo = 1) click to toggle source
# File lib/dlm.rb, line 11
def lock(what, block = false, lockinfo = 1)
  self.wait(what) if block
  ret = @redis.set("dlm_#{what}", lockinfo, :nx => true)
  raise DLMLockTaken, "Lock is already taken for #{what}: dlm_#{what}" unless ret
  ret
end
lockinfo(what) click to toggle source
# File lib/dlm.rb, line 24
def lockinfo(what)
  @redis.get("dlm_#{what}")
end
unlock(what) click to toggle source
# File lib/dlm.rb, line 28
def unlock(what)
  @redis.del("dlm_#{what}")
end
unlockall() click to toggle source
# File lib/dlm.rb, line 32
def unlockall
  keys = @redis.keys("dlm_*")
  @redis.del(keys) unless keys.empty?
end
wait(what) click to toggle source
# File lib/dlm.rb, line 18
def wait(what)
  while ! @redis.get("dlm_#{what}").nil?
    sleep(0.1)
  end
end