redis 1.0.5 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/redis.rb +5 -1
- data/lib/redis/client.rb +13 -4
- data/lib/redis/dist_redis.rb +8 -110
- data/lib/redis/distributed.rb +115 -0
- metadata +4 -3
data/lib/redis.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
require 'socket'
|
2
2
|
|
3
3
|
class Redis
|
4
|
-
VERSION = "1.0.
|
4
|
+
VERSION = "1.0.6"
|
5
5
|
|
6
6
|
def self.new(*attrs)
|
7
7
|
Client.new(*attrs)
|
8
8
|
end
|
9
|
+
|
10
|
+
def self.deprecate(message, trace = caller[0])
|
11
|
+
$stderr.puts "\n#{message} (in #{trace})"
|
12
|
+
end
|
9
13
|
end
|
10
14
|
|
11
15
|
begin
|
data/lib/redis/client.rb
CHANGED
@@ -63,10 +63,16 @@ class Redis
|
|
63
63
|
"hset" => BOOLEAN_PROCESSOR,
|
64
64
|
"hexists" => BOOLEAN_PROCESSOR,
|
65
65
|
"info" => lambda{|r|
|
66
|
-
info =
|
66
|
+
info = Hash.new do |hash, key|
|
67
|
+
if hash.include?(key.to_s)
|
68
|
+
Redis.deprecate "Redis#info will return a hash of string keys, not symbols", caller[2]
|
69
|
+
hash[key.to_s]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
67
73
|
r.each_line {|kv|
|
68
74
|
k,v = kv.split(":",2).map{|x| x.chomp}
|
69
|
-
info[k
|
75
|
+
info[k] = v
|
70
76
|
}
|
71
77
|
info
|
72
78
|
},
|
@@ -266,6 +272,7 @@ class Redis
|
|
266
272
|
end
|
267
273
|
|
268
274
|
def pipelined(&block)
|
275
|
+
Redis.deprecate("Calling pipelined commands on the yielded object will be deprecated in 2.0", caller[0])
|
269
276
|
pipeline = Pipeline.new self
|
270
277
|
yield pipeline
|
271
278
|
pipeline.execute
|
@@ -496,8 +503,10 @@ class Redis
|
|
496
503
|
@logger.send(level, str.to_s) if @logger
|
497
504
|
end
|
498
505
|
|
499
|
-
def deprecated(old, new, trace = caller[0])
|
500
|
-
|
506
|
+
def deprecated(old, new = nil, trace = caller[0])
|
507
|
+
message = "The method #{old} is deprecated and will be removed in 2.0"
|
508
|
+
message << " - use #{new} instead" if new
|
509
|
+
Redis.deprecate(message, trace)
|
501
510
|
end
|
502
511
|
|
503
512
|
def requires_timeout_reset?(command)
|
data/lib/redis/dist_redis.rb
CHANGED
@@ -1,115 +1,13 @@
|
|
1
|
-
|
1
|
+
Redis.deprecate %q{"redis/dist_redis" is deprecated. Require "redis/distributed" and replace DistRedis for Redis::Distributed.}, caller[0]
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
attr_reader :ring
|
6
|
-
def initialize(opts={})
|
7
|
-
hosts = []
|
8
|
-
|
9
|
-
db = opts[:db] || nil
|
10
|
-
timeout = opts[:timeout] || nil
|
11
|
-
|
12
|
-
raise "No hosts given" unless opts[:hosts]
|
13
|
-
|
14
|
-
opts[:hosts].each do |h|
|
15
|
-
host, port = h.split(':')
|
16
|
-
hosts << Client.new(:host => host, :port => port, :db => db, :timeout => timeout)
|
17
|
-
end
|
18
|
-
|
19
|
-
@ring = HashRing.new hosts
|
20
|
-
end
|
21
|
-
|
22
|
-
def node_for_key(key)
|
23
|
-
key = $1 if key =~ /\{(.*)?\}/
|
24
|
-
@ring.get_node(key)
|
25
|
-
end
|
26
|
-
|
27
|
-
def add_server(server)
|
28
|
-
server, port = server.split(':')
|
29
|
-
@ring.add_node Client.new(:host => server, :port => port)
|
30
|
-
end
|
31
|
-
|
32
|
-
def method_missing(sym, *args, &blk)
|
33
|
-
if redis = node_for_key(args.first.to_s)
|
34
|
-
redis.send sym, *args, &blk
|
35
|
-
else
|
36
|
-
super
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def node_keys(glob)
|
41
|
-
@ring.nodes.map do |red|
|
42
|
-
red.keys(glob)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def keys(glob)
|
47
|
-
node_keys(glob).flatten
|
48
|
-
end
|
49
|
-
|
50
|
-
def save
|
51
|
-
on_each_node :save
|
52
|
-
end
|
53
|
-
|
54
|
-
def bgsave
|
55
|
-
on_each_node :bgsave
|
56
|
-
end
|
57
|
-
|
58
|
-
def quit
|
59
|
-
on_each_node :quit
|
60
|
-
end
|
61
|
-
|
62
|
-
def flush_all
|
63
|
-
on_each_node :flush_all
|
64
|
-
end
|
65
|
-
alias_method :flushall, :flush_all
|
3
|
+
require "redis/hash_ring"
|
4
|
+
require "redis/distributed"
|
66
5
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
def delete_cloud!
|
73
|
-
@ring.nodes.each do |red|
|
74
|
-
red.keys("*").each do |key|
|
75
|
-
red.del key
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def on_each_node(command, *args)
|
81
|
-
@ring.nodes.each do |red|
|
82
|
-
red.send(command, *args)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def mset()
|
87
|
-
|
88
|
-
end
|
89
|
-
|
90
|
-
def mget(*keyz)
|
91
|
-
results = {}
|
92
|
-
kbn = keys_by_node(keyz)
|
93
|
-
kbn.each do |node, node_keyz|
|
94
|
-
node.mapped_mget(*node_keyz).each do |k, v|
|
95
|
-
results[k] = v
|
96
|
-
end
|
97
|
-
end
|
98
|
-
keyz.flatten.map { |k| results[k] }
|
99
|
-
end
|
100
|
-
|
101
|
-
def keys_by_node(*keyz)
|
102
|
-
keyz.flatten.inject({}) do |kbn, k|
|
103
|
-
node = node_for_key(k)
|
104
|
-
next if kbn[node] && kbn[node].include?(k)
|
105
|
-
kbn[node] ||= []
|
106
|
-
kbn[node] << k
|
107
|
-
kbn
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def type(key)
|
112
|
-
method_missing(:type, key)
|
6
|
+
class Redis
|
7
|
+
class DistRedis < Redis::Distributed
|
8
|
+
def initialize(*args)
|
9
|
+
Redis.deprecate "DistRedis is deprecated in favor of Redis::Distributed.", caller[1]
|
10
|
+
super(*args)
|
113
11
|
end
|
114
12
|
end
|
115
13
|
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'redis/hash_ring'
|
2
|
+
|
3
|
+
class Redis
|
4
|
+
class Distributed
|
5
|
+
attr_reader :ring
|
6
|
+
def initialize(opts={})
|
7
|
+
hosts = []
|
8
|
+
|
9
|
+
db = opts[:db] || nil
|
10
|
+
timeout = opts[:timeout] || nil
|
11
|
+
|
12
|
+
raise "No hosts given" unless opts[:hosts]
|
13
|
+
|
14
|
+
opts[:hosts].each do |h|
|
15
|
+
host, port = h.split(':')
|
16
|
+
hosts << Client.new(:host => host, :port => port, :db => db, :timeout => timeout)
|
17
|
+
end
|
18
|
+
|
19
|
+
@ring = HashRing.new hosts
|
20
|
+
end
|
21
|
+
|
22
|
+
def node_for_key(key)
|
23
|
+
key = $1 if key =~ /\{(.*)?\}/
|
24
|
+
@ring.get_node(key)
|
25
|
+
end
|
26
|
+
|
27
|
+
def add_server(server)
|
28
|
+
server, port = server.split(':')
|
29
|
+
@ring.add_node Client.new(:host => server, :port => port)
|
30
|
+
end
|
31
|
+
|
32
|
+
def method_missing(sym, *args, &blk)
|
33
|
+
if redis = node_for_key(args.first.to_s)
|
34
|
+
redis.send sym, *args, &blk
|
35
|
+
else
|
36
|
+
super
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def node_keys(glob)
|
41
|
+
@ring.nodes.map do |red|
|
42
|
+
red.keys(glob)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def keys(glob)
|
47
|
+
node_keys(glob).flatten
|
48
|
+
end
|
49
|
+
|
50
|
+
def save
|
51
|
+
on_each_node :save
|
52
|
+
end
|
53
|
+
|
54
|
+
def bgsave
|
55
|
+
on_each_node :bgsave
|
56
|
+
end
|
57
|
+
|
58
|
+
def quit
|
59
|
+
on_each_node :quit
|
60
|
+
end
|
61
|
+
|
62
|
+
def flush_all
|
63
|
+
on_each_node :flush_all
|
64
|
+
end
|
65
|
+
alias_method :flushall, :flush_all
|
66
|
+
|
67
|
+
def flush_db
|
68
|
+
on_each_node :flush_db
|
69
|
+
end
|
70
|
+
alias_method :flushdb, :flush_db
|
71
|
+
|
72
|
+
def delete_cloud!
|
73
|
+
@ring.nodes.each do |red|
|
74
|
+
red.keys("*").each do |key|
|
75
|
+
red.del key
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def on_each_node(command, *args)
|
81
|
+
@ring.nodes.each do |red|
|
82
|
+
red.send(command, *args)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def mset()
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
def mget(*keyz)
|
91
|
+
results = {}
|
92
|
+
kbn = keys_by_node(keyz)
|
93
|
+
kbn.each do |node, node_keyz|
|
94
|
+
node.mapped_mget(*node_keyz).each do |k, v|
|
95
|
+
results[k] = v
|
96
|
+
end
|
97
|
+
end
|
98
|
+
keyz.flatten.map { |k| results[k] }
|
99
|
+
end
|
100
|
+
|
101
|
+
def keys_by_node(*keyz)
|
102
|
+
keyz.flatten.inject({}) do |kbn, k|
|
103
|
+
node = node_for_key(k)
|
104
|
+
next if kbn[node] && kbn[node].include?(k)
|
105
|
+
kbn[node] ||= []
|
106
|
+
kbn[node] << k
|
107
|
+
kbn
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def type(key)
|
112
|
+
method_missing(:type, key)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 1.0.
|
8
|
+
- 6
|
9
|
+
version: 1.0.6
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ezra Zygmuntowicz
|
@@ -19,7 +19,7 @@ autorequire: redis
|
|
19
19
|
bindir: bin
|
20
20
|
cert_chain: []
|
21
21
|
|
22
|
-
date: 2010-04-
|
22
|
+
date: 2010-04-26 00:00:00 -03:00
|
23
23
|
default_executable:
|
24
24
|
dependencies: []
|
25
25
|
|
@@ -38,6 +38,7 @@ files:
|
|
38
38
|
- lib/edis.rb
|
39
39
|
- lib/redis/client.rb
|
40
40
|
- lib/redis/dist_redis.rb
|
41
|
+
- lib/redis/distributed.rb
|
41
42
|
- lib/redis/hash_ring.rb
|
42
43
|
- lib/redis/pipeline.rb
|
43
44
|
- lib/redis/raketasks.rb
|