class DynportTools::RedisDumper

Attributes

redis[RW]

Public Class Methods

new(redis = nil) click to toggle source
# File lib/dynport_tools/redis_dumper.rb, line 7
def initialize(redis = nil)
  self.redis = redis
end

Public Instance Methods

dump_hash(hash) click to toggle source
# File lib/dynport_tools/redis_dumper.rb, line 31
def dump_hash(hash)
  hash.each do |key, value|
    puts [key, value].join("\t")
  end
end
print_usage_and_die() click to toggle source
run_from_args(args) click to toggle source
# File lib/dynport_tools/redis_dumper.rb, line 37
def run_from_args(args)
  host, port, key = args
  if key
    self.redis = Redis.new(:host => host, :port => port)
    key_type = redis.type(key)
    if key_type == "zset"
      dump_hash(zset_to_hash(key))
    else
      $stderr.puts "only zsets are supported for now"
      exit(1)
    end
  else
    print_usage_and_die
  end
end
zset_to_hash(key, window = 10_000) click to toggle source
# File lib/dynport_tools/redis_dumper.rb, line 11
def zset_to_hash(key, window = 10_000)
  hash = {}
  offset = 0
  while true
    values = redis.zrevrange(key, offset, offset + (window - 1), :with_scores => true)
    current_key = nil
    values.each do |value|
      if current_key.nil?
        current_key = value
      else
        hash[current_key] = value
        current_key = nil
      end
    end
    offset += window
    break if values.length < window * 2
  end
  hash
end