class RedisRds::Mutex

Constants

DEFAULT_EXPIRY

Attributes

expiry[R]
id[R]

Public Class Methods

new(id, expiry = DEFAULT_EXPIRY, owner = '') click to toggle source
Calls superclass method RedisRds::Object::new
# File lib/redis_rds/mutex.rb, line 7
def initialize(id, expiry = DEFAULT_EXPIRY, owner = '')
  super("#{namespace}:mutex:#{id}")

  @id = id
  @expiry = expiry
  @owner = owner.blank? ? generate_owner : owner
end
unserialize(serialized) click to toggle source
# File lib/redis_rds/mutex.rb, line 51
def unserialize(serialized)
  return self.new(*serialized)
end

Public Instance Methods

lock() click to toggle source
# File lib/redis_rds/mutex.rb, line 15
def lock
  connection.set(@redis_key, @owner, ex: @expiry, nx: true)
  return locked?
end
locked?() click to toggle source
# File lib/redis_rds/mutex.rb, line 20
def locked?
  return connection.get(@redis_key) == @owner
end
Also aliased as: owned?
owned?()
Alias for: locked?
release() click to toggle source
# File lib/redis_rds/mutex.rb, line 25
def release
  self.delete if owned?
end
serialize() click to toggle source
# File lib/redis_rds/mutex.rb, line 29
def serialize
  [@id, @expiry, @owner]
end
synchronize() { || ... } click to toggle source
# File lib/redis_rds/mutex.rb, line 33
def synchronize
  if self.lock
    begin
      yield if block_given?
    ensure
      self.release
    end
  end
end

Private Instance Methods

generate_owner() click to toggle source
# File lib/redis_rds/mutex.rb, line 43
def generate_owner
  now = Time.now.to_f
  random = Random.new(now)
  return Digest::MD5.hexdigest(random.rand(now).to_s)
end