Class: DLM

Inherits:
Object
  • Object
show all
Defined in:
lib/dlm.rb

Instance Method Summary collapse

Constructor Details

#initialize(redis = Redis.new) ⇒ DLM

Returns a new instance of DLM.



7
8
9
# File 'lib/dlm.rb', line 7

def initialize(redis=Redis.new)
  @redis = redis
end

Instance Method Details

#lock(what, block = false, lockinfo = 1) ⇒ Object

Raises:



11
12
13
14
15
16
# 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) ⇒ Object



24
25
26
# File 'lib/dlm.rb', line 24

def lockinfo(what)
  @redis.get("dlm_#{what}")
end

#unlock(what) ⇒ Object



28
29
30
# File 'lib/dlm.rb', line 28

def unlock(what)
  @redis.del("dlm_#{what}")
end

#unlockallObject



32
33
34
35
# File 'lib/dlm.rb', line 32

def unlockall
  keys = @redis.keys("dlm_*")
  @redis.del(keys) unless keys.empty?
end

#wait(what) ⇒ Object



18
19
20
21
22
# File 'lib/dlm.rb', line 18

def wait(what)
  while ! @redis.get("dlm_#{what}").nil?
    sleep(0.1)
  end
end