redis 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|