Class: DistributedMutex
- Inherits:
-
Object
- Object
- DistributedMutex
- Defined in:
- lib/distributed_mutex.rb,
lib/distributed_mutex/version.rb
Overview
Cross-process locking using Redis.
Constant Summary collapse
- VERSION =
"0.1.1"
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(key, redis = nil) ⇒ DistributedMutex
constructor
A new instance of DistributedMutex.
-
#synchronize ⇒ Object
NOTE wrapped in mutex to maintain its semantics.
Constructor Details
#initialize(key, redis = nil) ⇒ DistributedMutex
Returns a new instance of DistributedMutex.
7 8 9 10 11 |
# File 'lib/distributed_mutex.rb', line 7 def initialize(key, redis=nil) @key = key @redis = redis || $redis @mutex = Mutex.new end |
Class Method Details
.synchronize(key, redis = nil, &blk) ⇒ Object
3 4 5 |
# File 'lib/distributed_mutex.rb', line 3 def self.synchronize(key, redis=nil, &blk) self.new(key, redis).synchronize(&blk) end |
Instance Method Details
#synchronize ⇒ Object
NOTE wrapped in mutex to maintain its semantics
14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/distributed_mutex.rb', line 14 def synchronize @mutex.lock while !try_to_get_lock sleep 0.001 end yield ensure @redis.del @key @mutex.unlock end |