8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/redis-copy/strategy/classic.rb', line 8
def copy(key)
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)
else
return false
end
@dst.expire(key, ttl) unless ttl < 0 || vtype == 'none'
return true
end
|