39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
# File 'lib/redis-copy/strategy/classic.rb', line 39
def copy(key)
@ui.debug("COPY: #{key.dump}")
vtype = @src.type(key)
ttl = @src.ttl(key)
case vtype
when 'string'
string = @src.get(key)
@dst.set(key, string)
when "list"
list = @src.lrange(key, 0, -1)
if list.length == 0
maybe_pipeline(@dst) do |dst|
dst.lpush(key, '')
dst.lpop(key)
end
else
maybe_pipeline(@dst) do |dst|
list.each do |ele|
dst.rpush(key, ele)
end
end
end
when "set"
set = @src.smembers(key)
if set.length == 0
maybe_pipeline(@dst) do |dst|
dst.sadd(key, '')
dst.srem(key, '')
end
else
maybe_pipeline(@dst) do |dst|
set.each do |ele|
dst.sadd(key,ele)
end
end
end
when 'hash'
hash = @src.hgetall(key)
@dst.mapped_hmset(key, hash)
when 'zset'
vs_zset = @src.zrange(key, 0, -1, :with_scores => true)
sv_zset = vs_zset.map(&:reverse)
@dst.zadd(key, sv_zset)
when 'none'
@ui.warn("GONE: #{key.dump}")
return false
else
@ui.warn("UNKNOWN(#{vtype}): #{key.dump}")
return false
end
@dst.expire(key, ttl) unless ttl < 0 || vtype == 'none'
return true
end
|