class Workerholic::Storage::RedisWrapper

Attributes

redis[R]
retries[R]

Public Class Methods

new() click to toggle source
# File lib/workerholic/storage.rb, line 6
def initialize
  @retries = 0
  @redis = Workerholic.redis_pool

  redis.with do |conn|
    conn.ping
  end
end

Public Instance Methods

add_to_set(key, score, value, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 56
def add_to_set(key, score, value, retry_delay = 5)
  execute(retry_delay) { |conn| conn.zadd(key, score, value) }
end
delete(key, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 39
def delete(key, retry_delay = 5)
  execute(retry_delay) { |conn| conn.del(key) }
end
fetch_queue_names(retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 88
def fetch_queue_names(retry_delay = 5)
  queue_name_pattern = 'workerholic:queue:*'

  execute(retry_delay) { |conn| conn.keys(queue_name_pattern) }
end
get_all_elements_from_list(key, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 98
def get_all_elements_from_list(key, retry_delay = 5)
  execute(retry_delay) { |conn| conn.lrange(key, 0, -1) }
end
get_keys_for_namespace(namespace, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 94
def get_keys_for_namespace(namespace, retry_delay = 5)
  execute(retry_delay) { |conn| conn.keys(namespace) }
end
hash_get(key, field, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 19
def hash_get(key, field, retry_delay = 5)
  execute(retry_delay) { |conn| conn.hget(key, field) }
end
hash_get_all(key, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 23
def hash_get_all(key, retry_delay = 5)
  execute(retry_delay) { |conn| conn.hgetall(key) }
end
hash_get_multiple_elements(key, fields, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 31
def hash_get_multiple_elements(key, fields, retry_delay = 5)
  execute(retry_delay) { |conn| conn.hmget(key, *fields) }
end
hash_increment_field(key, field, increment, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 35
def hash_increment_field(key, field, increment, retry_delay = 5)
  execute(retry_delay) { |conn| conn.hincrby(key, field, increment) }
end
hash_keys(namespace, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 27
def hash_keys(namespace, retry_delay = 5)
  execute(retry_delay) { |conn| conn.hkeys(namespace) }
end
hash_set(key, field, value, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 15
def hash_set(key, field, value, retry_delay = 5)
  execute(retry_delay) { |conn| conn.hset(key, field, value) }
end
keys_count(namespace, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 84
def keys_count(namespace, retry_delay = 5)
  execute(retry_delay) { |conn| conn.keys(namespace + ':*').size }
end
list_length(key, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 43
def list_length(key, retry_delay = 5)
  execute(retry_delay) { |conn| conn.llen(key) }
end
peek(key, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 60
def peek(key, retry_delay = 5)
  execute(retry_delay) { |conn| conn.zrange(key, 0, 0, with_scores: true).first }
end
pop(key, timeout = 1, retry_delay = 5) click to toggle source

blocking pop from Redis queue

# File lib/workerholic/storage.rb, line 52
def pop(key, timeout = 1, retry_delay = 5)
  execute(retry_delay) { |conn| conn.blpop(key, timeout) }
end
push(key, value, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 47
def push(key, value, retry_delay = 5)
  execute(retry_delay) { |conn| conn.rpush(key, value) }
end
remove_from_set(key, score, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 64
def remove_from_set(key, score, retry_delay = 5)
  execute(retry_delay) { |conn| conn.zremrangebyscore(key, score, score) }
end
remove_range_from_set(key, minscore, maxscore, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 80
def remove_range_from_set(key, minscore, maxscore, retry_delay = 5)
  execute(retry_delay) { |conn| conn.zremrangebyscore(key, minscore, maxscore) }
end
sorted_set_all_members(key, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 72
def sorted_set_all_members(key, retry_delay = 5)
  execute(retry_delay) { |conn| conn.zrange(key, 0, -1) }
end
sorted_set_range_members(key, minscore, maxscore, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 76
def sorted_set_range_members(key, minscore, maxscore, retry_delay = 5)
  execute(retry_delay) { |conn| conn.zrangebyscore(key, minscore, maxscore, with_scores: true) }
end
sorted_set_size(key, retry_delay = 5) click to toggle source
# File lib/workerholic/storage.rb, line 68
def sorted_set_size(key, retry_delay = 5)
  execute(retry_delay) { |conn| conn.zcard(key) }
end

Private Instance Methods

execute(retry_delay = 5) { |conn| ... } click to toggle source
# File lib/workerholic/storage.rb, line 106
def execute(retry_delay = 5)
  begin
    result = redis.with { |conn| yield conn }
    reset_retries
  rescue Redis::CannotConnectError
    @retries += 1
    if retries_exhausted?
      raise RedisCannotRecover, 'Redis reconnect retries exhausted. Main Workerholic thread will be terminated now.'
    end

    sleep retry_delay
    retry
  end

  result
end
reset_retries() click to toggle source
# File lib/workerholic/storage.rb, line 127
def reset_retries
  @retries = 0
end
retries_exhausted?() click to toggle source
# File lib/workerholic/storage.rb, line 123
def retries_exhausted?
  retries == 5
end