class SimpleCacheLock::Client
Public Instance Methods
lock(lock_key, content_cache_key, options = {}, &block)
click to toggle source
@param lock_key [String] @param content_cache_key [String] @param options [Hash]
lock_timeout [Integer] wait_timeout [Integer] wait_lock_timeout [Integer] optional
# File lib/simple_cache_lock/client.rb, line 11 def lock(lock_key, content_cache_key, options = {}, &block) return cache_store.read content_cache_key if cache_store.exist? content_cache_key @options = options is_locked = redlock.lock(lock_key, lock_timeout) if is_locked == false Timeout::timeout(wait_timeout) { loop do is_locked = redlock.lock(lock_key, wait_lock_timeout) if is_locked == false sleep rand else break end end } if cache_store.exist? content_cache_key redlock.unlock(is_locked) unless is_locked return cache_store.read content_cache_key end end result = block.call cache_store.write content_cache_key, result redlock.unlock(is_locked) result rescue Redlock::LockError, Timeout::Error => error raise SimpleCacheLock::Error, error end
Private Instance Methods
cache_store()
click to toggle source
# File lib/simple_cache_lock/client.rb, line 45 def cache_store SimpleCacheLock.configuration.cache_store end
lock_timeout()
click to toggle source
# File lib/simple_cache_lock/client.rb, line 54 def lock_timeout @options[:initial_lock_timeout] || SimpleCacheLock.configuration.default_lock_timeout end
redlock()
click to toggle source
# File lib/simple_cache_lock/client.rb, line 49 def redlock @redlock ||= Redlock::Client.new(SimpleCacheLock.configuration.redis_urls) end
wait_lock_timeout()
click to toggle source
# File lib/simple_cache_lock/client.rb, line 58 def wait_lock_timeout @options[:wait_lock_timeout] || SimpleCacheLock.configuration.default_wait_lock_timeout end
wait_timeout()
click to toggle source
# File lib/simple_cache_lock/client.rb, line 62 def wait_timeout @options[:wait_timeout] || SimpleCacheLock.configuration.default_wait_timeout end