Class: Xunch::ShardRedis

Inherits:
Sharded show all
Defined in:
lib/xunch/shard/shard_redis.rb

Instance Method Summary collapse

Methods inherited from Sharded

#destroy

Constructor Details

#initialize(regex, shard_infos) ⇒ ShardRedis

Returns a new instance of ShardRedis.



4
5
6
# File 'lib/xunch/shard/shard_redis.rb', line 4

def initialize(regex,shard_infos)
  super 
end

Instance Method Details

#batch_del(keys) ⇒ Object



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
# File 'lib/xunch/shard/shard_redis.rb', line 18

def batch_del(keys)
  shard_key_map = Hash.new
  shard_index_map = Hash.new
  for i in 0 .. keys.length - 1 do
    redis = get_shard(keys[i])
    if shard_key_map[redis] == nil
      shard_key = Array.new
      shard_key.push(keys[i])
      shard_index = Array.new
      shard_index.push(i)
      shard_key_map[redis] = shard_key
      shard_index_map[redis] = shard_index
    else
      shard_key_map[redis].push(keys[i])
      shard_index_map[redis].push(i)
    end
  end

  results = Array.new(keys.length)
  shard_key_map.each { | redis, keys |
    values = redis.del(keys)
    shard_index = shard_index_map[redis]
    for i in 0 .. shard_index.length - 1 do
      results[shard_index[i]] = values[i]
    end
  }
  results
end

#del(key) ⇒ Object



13
14
15
16
# File 'lib/xunch/shard/shard_redis.rb', line 13

def del(key)
  redis = get_shard(key)
  redis.del(key)
end

#exists(key) ⇒ Object



8
9
10
11
# File 'lib/xunch/shard/shard_redis.rb', line 8

def exists(key)
  redis = get_shard(key)
  redis.exists(key)
end

#expire(key, ttl) ⇒ Object



47
48
49
50
# File 'lib/xunch/shard/shard_redis.rb', line 47

def expire(key, ttl)
  redis = get_shard(key)
  redis.expire(key, ttl)
end

#get(key) ⇒ Object



57
58
59
60
# File 'lib/xunch/shard/shard_redis.rb', line 57

def get(key)
  redis = get_shard(key)
  redis.get(key)
end

#hgetall(key) ⇒ Object



149
150
151
152
# File 'lib/xunch/shard/shard_redis.rb', line 149

def hgetall(key)
  redis = get_shard(key)
  redis.hgetall(key)
end

#hmgetall(keys) ⇒ Object



159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'lib/xunch/shard/shard_redis.rb', line 159

def hmgetall(keys)
  shard_key_map = Hash.new
  shard_index_map = Hash.new
  for i in 0 .. keys.length - 1 do
    redis = get_shard(keys[i])
    if shard_key_map[redis] == nil
      shard_key = Array.new
      shard_key.push(keys[i])
      shard_index = Array.new
      shard_index.push(i)
      shard_key_map[redis] = shard_key
      shard_index_map[redis] = shard_index
    else
      shard_key_map[redis].push(keys[i])
      shard_index_map[redis].push(i)
    end
  end

  results = Array.new(keys.length)
  shard_key_map.each { | redis, keys |
    values = redis.hmgetall(keys)
    shard_index = shard_index_map[redis]
    for i in 0 .. shard_index.length - 1 do
      results[shard_index[i]] = values[i]
    end
  }
  results
end

#hmsetall(key_value_pairs, ttl) ⇒ Object



188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
# File 'lib/xunch/shard/shard_redis.rb', line 188

def hmsetall(key_value_pairs, ttl)
  shard_map = Hash.new
  key_value_pairs.each { | key, value |
    redis = get_shard(key)
    if shard_map[redis] == nil
      shard = Hash.new
      shard[key] = value
      shard_map[redis] = shard
    else
      shard_map[redis][key] = value
    end
  }
  result = []
  shard_map.each { | redis, kvs |
    result.push redis.hmset(kvs, ttl)
  }
  result.flatten!
end

#hsetall(key, hash, ttl) ⇒ Object



154
155
156
157
# File 'lib/xunch/shard/shard_redis.rb', line 154

def hsetall(key, hash, ttl)
  redis = get_shard(key)
  redis.hsetall(key,hash,ttl)
end

#llen(key) ⇒ Object



236
237
238
239
# File 'lib/xunch/shard/shard_redis.rb', line 236

def llen(key)
  redis = get_shard(key)
  redis.llen(key)
end

#lrange(key, start, stop) ⇒ Object



252
253
254
255
# File 'lib/xunch/shard/shard_redis.rb', line 252

def lrange(key, start, stop)
  redis = get_shard(key)
  redis.lrange(key,start,stop)
end

#lremove(key, value) ⇒ Object



241
242
243
244
# File 'lib/xunch/shard/shard_redis.rb', line 241

def lremove(key,value)
  redis = get_shard(key)
  redis.lrem(key,*value)
end

#lset(temp_key, new_key, sub_keys, ttl) ⇒ Object



246
247
248
249
250
# File 'lib/xunch/shard/shard_redis.rb', line 246

def lset(temp_key, new_key, sub_keys, ttl)
  redis = get_shard(new_key)
  result = redis.lset(temp_key,new_key,sub_keys,ttl)
  result[result.length - 2]
end

#mapped_hget(key, fields) ⇒ Object



115
116
117
118
# File 'lib/xunch/shard/shard_redis.rb', line 115

def mapped_hget(key,fields)
  redis = get_shard(key)
  redis.hget(key,*fields)
end

#mapped_hmget(keys, fields) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/xunch/shard/shard_redis.rb', line 120

def mapped_hmget(keys,fields)
  shard_key_map = Hash.new
  shard_index_map = Hash.new
  for i in 0 .. keys.length - 1 do
    redis = get_shard(keys[i])
    if shard_key_map[redis] == nil
      shard_key = Array.new
      shard_key.push(keys[i])
      shard_index = Array.new
      shard_index.push(i)
      shard_key_map[redis] = shard_key
      shard_index_map[redis] = shard_index
    else
      shard_key_map[redis].push(keys[i])
      shard_index_map[redis].push(i)
    end
  end

  results = Array.new(keys.length)
  shard_key_map.each { | redis, keys |
    values = redis.hmget(keys,*fields)
    shard_index = shard_index_map[redis]
    for i in 0 .. shard_index.length - 1 do
      results[shard_index[i]] = values[i]
    end
  }
  results
end

#mget(keys) ⇒ Object



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
# File 'lib/xunch/shard/shard_redis.rb', line 62

def mget(keys)
  shard_key_map = Hash.new
  shard_index_map = Hash.new
  for i in 0 .. keys.length - 1 do
    redis = get_shard(keys[i])
    if shard_key_map[redis] == nil
      shard_key = Array.new
      shard_key.push(keys[i])
      shard_index = Array.new
      shard_index.push(i)
      shard_key_map[redis] = shard_key
      shard_index_map[redis] = shard_index
    else
      shard_key_map[redis].push(keys[i])
      shard_index_map[redis].push(i)
    end
  end

  results = Array.new(keys.length)
  shard_key_map.each { | redis, keys |
    values = redis.mget(keys)
    shard_index = shard_index_map[redis]
    for i in 0 .. shard_index.length - 1 do
      results[shard_index[i]] = values[i]
    end
  }
  results
end

#mset(key_value_pairs, ttl) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/xunch/shard/shard_redis.rb', line 96

def mset(key_value_pairs, ttl)
  shard_map = Hash.new
  key_value_pairs.each { | key, value |
    redis = get_shard(key)
    if shard_map[redis] == nil
      shard = Hash.new
      shard[key] = value
      shard_map[redis] = shard
    else
      shard_map[redis][key] = value
    end
  }
  result = []
  shard_map.each { | redis, kvs |
    result.push redis.mset(kvs, ttl)
  }
  return result.flatten!
end

#rename(old_key, new_key) ⇒ Object



257
258
259
260
# File 'lib/xunch/shard/shard_redis.rb', line 257

def rename(old_key, new_key)
  redis = get_shard(key)
  redis.rename(old_key,new_key)
end

#set(key, value, ttl) ⇒ Object



91
92
93
94
# File 'lib/xunch/shard/shard_redis.rb', line 91

def set(key, value, ttl)
  redis = get_shard(key)
  redis.set(key,value,ttl)
end

#ttl(key) ⇒ Object



52
53
54
55
# File 'lib/xunch/shard/shard_redis.rb', line 52

def ttl(key)
  redis = get_shard(key)
  redis.ttl(key)
end

#type(key) ⇒ Object



262
263
264
265
# File 'lib/xunch/shard/shard_redis.rb', line 262

def type(key)
  redis = get_shard(key)
  redis.type(key)
end