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?
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