Sha256: 94e89e7a8128cedfc547e1d8139aa708345b7b1728603e87903729adceb1c3ad
Contents?: true
Size: 1.33 KB
Versions: 1
Compression:
Stored size: 1.33 KB
Contents
require "easy_redis_lock/version" require 'uri' require 'redis' module EasyRedisLock class GateKeeper attr_reader :delay, :redis, :seconds_delay, :lock_time def initialize options={} @delay = options.fetch(:delay, 1500) @lock_time = options.fetch(:lock_time, 30) # seconds @redis = options.fetch(:redis) { Redis.new } end def should_delay? delay_key in_progress? delay_key end def mark_in_progress delay_key set_progress delay_key end def with_lock delay_key=Time.now.to_i, delay=seconds_delay, &block retries = 0 begin while should_delay?(delay_key) do sleep(delay) retries += 1 break if retries >= 30 end mark_in_progress(delay_key) yield if block_given? ensure expire_lock(delay_key) end end def cleanup close_connection! end private def seconds_delay delay.to_f / 1000.0 end def close_connection! redis.quit end def expire_lock delay_key redis.del("easy_redis_lock:#{delay_key}") end def in_progress? delay_key redis.exists("easy_redis_lock:#{delay_key}") end def set_progress delay_key redis.setex("easy_redis_lock:#{delay_key}", lock_time, 1) # auto expires after lock_time seconds end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
easy_redis_lock-0.0.2 | lib/easy_redis_lock.rb |