Class: DistributedMutex
- Inherits:
-
Object
- Object
- DistributedMutex
- Defined in:
- lib/distributed_mutex.rb
Overview
Cross-process locking using Redis.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(key, redis = nil, timeout = 60) ⇒ DistributedMutex
constructor
A new instance of DistributedMutex.
-
#synchronize ⇒ Object
NOTE wrapped in mutex to maintain its semantics.
Constructor Details
#initialize(key, redis = nil, timeout = 60) ⇒ DistributedMutex
Returns a new instance of DistributedMutex.
10 11 12 13 14 15 16 |
# File 'lib/distributed_mutex.rb', line 10 def initialize(key, redis=nil, timeout=60) @key = key @redis = redis || $redis @lock_manager = Redlock::Client.new([@redis]) @timeout = timeout @mutex = Mutex.new end |
Class Method Details
.synchronize(key, redis = nil, timeout = 60, &blk) ⇒ Object
6 7 8 |
# File 'lib/distributed_mutex.rb', line 6 def self.synchronize(key, redis=nil, timeout=60, &blk) self.new(key, redis, timeout).synchronize(&blk) end |
Instance Method Details
#synchronize ⇒ Object
NOTE wrapped in mutex to maintain its semantics
19 20 21 22 23 24 25 26 |
# File 'lib/distributed_mutex.rb', line 19 def synchronize @mutex.lock @lock_manager.lock(@key, @timeout) do |lock_info| yield lock_info end ensure @mutex.unlock end |