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