class DistributedMutex
Cross-process locking using Redis.
Public Class Methods
new(key, redis=nil, timeout=60)
click to toggle source
# File lib/distributed_mutex.rb, line 9 def initialize(key, redis=nil, timeout=60) @key = key @redis = redis || $redis @lock_manager = Redlock::Client.new([@redis]) @timeout = timeout @mutex = Mutex.new end
synchronize(key, redis=nil, timeout=60, &blk)
click to toggle source
# File lib/distributed_mutex.rb, line 5 def self.synchronize(key, redis=nil, timeout=60, &blk) self.new(key, redis, timeout).synchronize(&blk) end
Public Instance Methods
synchronize() { |lock_info| ... }
click to toggle source
NOTE wrapped in mutex to maintain its semantics
# File lib/distributed_mutex.rb, line 18 def synchronize @mutex.lock @lock_manager.lock(@key, @timeout) do |lock_info| yield lock_info end ensure @mutex.unlock end