module Redlics

Redlics namespace

Redlics version.

Constants

CONTEXTS
LUA_CACHE

Redlics constants.

LUA_SCRIPT
VERSION

Public Instance Methods

config() click to toggle source

Get or initialize Redlics config. @return [OpenStruct] Redlics configuration

# File lib/redlics.rb, line 75
def config
  @config ||= Redlics::Config.new
end
configure() { |config| ... } click to toggle source

Set configuration of Redlics in a block. @return [OpenStruct] Redlics configuration

# File lib/redlics.rb, line 81
def configure
  yield config if block_given?
end
redis() { |conn| ... } click to toggle source

Get or initialize the Redis connection. @return [Object] redis connection

# File lib/redlics.rb, line 31
def redis
  raise ArgumentError, 'requires a block' unless block_given?
  redis_pool.with do |conn|
    retryable = true
    begin
      yield conn
    rescue Redis::BaseError => e
      raise e unless config.silent
    rescue Redis::CommandError => ex
      (conn.disconnect!; retryable = false; retry) if retryable && ex.message =~ /READONLY/
      raise unless config.silent
    end
  end
end
script(file, *args) click to toggle source

Load Lua script file and arguments in Redis.

@param file [String] absolute path to the Lua script file @param *args [Array] list of arguments for Redis evalsha @return [String] Lua script result

# File lib/redlics.rb, line 51
def script(file, *args)
  begin
    cache = LUA_CACHE[redis { |r| r.client.options[:url] }]
    if cache.key?(file)
      sha = cache[file]
    else
      src = File.read(file)
      sha = redis { |r| r.redis.script(:load, src) }
      cache[file] = sha
    end
    redis { |r| r.evalsha(sha, *args) }
  rescue RuntimeError
    case $!.message
    when Exception::ErrorPatterns::NOSCRIPT
      LUA_CACHE[redis { |r| r.client.options[:url] }].clear
      retry
    else
      raise $! unless config.silent
    end
  end
end

Private Instance Methods

redis_pool() click to toggle source

Get or initialize the Redis connection pool. @return [ConnectionPool] redis connection pool

# File lib/redlics.rb, line 89
def redis_pool
  @redis ||= Redlics::Connection.create(config.to_h)
end