Class: DynportTools::RedisDumper

Inherits:
Object
  • Object
show all
Defined in:
lib/dynport_tools/redis_dumper.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(redis = nil) ⇒ RedisDumper

Returns a new instance of RedisDumper.



7
8
9
# File 'lib/dynport_tools/redis_dumper.rb', line 7

def initialize(redis = nil)
  self.redis = redis
end

Instance Attribute Details

#redisObject

Returns the value of attribute redis.



5
6
7
# File 'lib/dynport_tools/redis_dumper.rb', line 5

def redis
  @redis
end

Instance Method Details

#dump_hash(hash) ⇒ Object



31
32
33
34
35
# 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


53
54
55
56
# File 'lib/dynport_tools/redis_dumper.rb', line 53

def print_usage_and_die
  $stderr.puts "USAGE: redis_dumper <redis_host> <redis_port> <key>"
  exit(1)
end

#run_from_args(args) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 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) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 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