Sha256: 0a24bc9a400c7a81f06317ddeeac9bf991a25a412ef0a3975c4e2af8b8aa3237
Contents?: true
Size: 1.67 KB
Versions: 1
Compression:
Stored size: 1.67 KB
Contents
require 'redis' require "redis_lock/version" require "redis_lock/configuration" class RedisLock attr_reader :key def self.config @config ||= Configuration.new end def self.setup yield config end def config; self.class.config; end def initialize(key, opts = {}) @key = key @redis = opts[:redis] end def redis @redis ||= config.redis end # Redis SET options: # - EX seconds -- Set the specified expire time, in seconds. # - PX milliseconds -- Set the specified expire time, in milliseconds. # - NX -- Only set the key if it does not already exist. # - XX -- Only set the key if it already exist. def set(expiration_time = 60, opts = {}) value = opts.delete(:value) || Time.now.strftime('%FT%T') args = if opts[:px] { px: expiration_time } else { ex: expiration_time } end redis.set(key, value, args.merge(opts)) == "OK" ? true : false end def if_open(args = {}, &block) return if locked? _perform(&block) end alias_method :perform, :if_open def if_locked(args = {}, &block) return if open? _perform(&block) end def locked? ttl == -2 ? false : true end alias_method :exists?, :locked? def ttl redis.ttl(key) end def open? !locked? end alias_method :unlocked?, :open? def delete redis.del(key) == 1 ? true : false end alias_method :unlock!, :delete alias_method :open!, :delete alias_method :remove, :delete def value redis.get(key) end private def _perform(&block) yield self rescue => e config.logger.error "[#{self.class}] key: `#{key}` error:" config.logger.error e raise e end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
redis_lock-0.2.0 | lib/redis_lock.rb |