Class: RedisRb::DistRedis
- Inherits:
-
Object
- Object
- RedisRb::DistRedis
show all
- Defined in:
- lib/redis/dist_redis.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(opts = {}) ⇒ DistRedis
Returns a new instance of DistRedis.
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/redis/dist_redis.rb', line 6
def initialize(opts={})
hosts = []
db = opts[:db] || nil
timeout = opts[:timeout] || nil
raise "No hosts given" unless opts[:hosts]
opts[:hosts].each do |h|
host, port = h.split(':')
hosts << Client.new(:host => host, :port => port, :db => db, :timeout => timeout)
end
@ring = HashRing.new hosts
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(sym, *args, &blk) ⇒ Object
32
33
34
35
36
37
38
|
# File 'lib/redis/dist_redis.rb', line 32
def method_missing(sym, *args, &blk)
if redis = node_for_key(args.first.to_s)
redis.send sym, *args, &blk
else
super
end
end
|
Instance Attribute Details
#ring ⇒ Object
Returns the value of attribute ring.
5
6
7
|
# File 'lib/redis/dist_redis.rb', line 5
def ring
@ring
end
|
Instance Method Details
#add_server(server) ⇒ Object
27
28
29
30
|
# File 'lib/redis/dist_redis.rb', line 27
def add_server(server)
server, port = server.split(':')
@ring.add_node Client.new(:host => server, :port => port)
end
|
#bgsave ⇒ Object
54
55
56
|
# File 'lib/redis/dist_redis.rb', line 54
def bgsave
on_each_node :bgsave
end
|
#delete_cloud! ⇒ Object
72
73
74
75
76
77
78
|
# File 'lib/redis/dist_redis.rb', line 72
def delete_cloud!
@ring.nodes.each do |red|
red.keys("*").each do |key|
red.delete key
end
end
end
|
#flush_all ⇒ Object
Also known as:
flushall
62
63
64
|
# File 'lib/redis/dist_redis.rb', line 62
def flush_all
on_each_node :flush_all
end
|
#flush_db ⇒ Object
Also known as:
flushdb
67
68
69
|
# File 'lib/redis/dist_redis.rb', line 67
def flush_db
on_each_node :flush_db
end
|
#keys(glob) ⇒ Object
46
47
48
|
# File 'lib/redis/dist_redis.rb', line 46
def keys(glob)
node_keys(glob).flatten
end
|
#keys_by_node(*keyz) ⇒ Object
101
102
103
104
105
106
107
108
109
|
# File 'lib/redis/dist_redis.rb', line 101
def keys_by_node(*keyz)
keyz.flatten.inject({}) do |kbn, k|
node = node_for_key(k)
next if kbn[node] && kbn[node].include?(k)
kbn[node] ||= []
kbn[node] << k
kbn
end
end
|
#mget(*keyz) ⇒ Object
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/redis/dist_redis.rb', line 90
def mget(*keyz)
results = {}
kbn = keys_by_node(keyz)
kbn.each do |node, node_keyz|
node.mapped_mget(*node_keyz).each do |k, v|
results[k] = v
end
end
keyz.flatten.map { |k| results[k] }
end
|
#mset ⇒ Object
86
87
88
|
# File 'lib/redis/dist_redis.rb', line 86
def mset()
end
|
#node_for_key(key) ⇒ Object
22
23
24
25
|
# File 'lib/redis/dist_redis.rb', line 22
def node_for_key(key)
key = $1 if key =~ /\{(.*)?\}/
@ring.get_node(key)
end
|
#node_keys(glob) ⇒ Object
40
41
42
43
44
|
# File 'lib/redis/dist_redis.rb', line 40
def node_keys(glob)
@ring.nodes.map do |red|
red.keys(glob)
end
end
|
#on_each_node(command, *args) ⇒ Object
80
81
82
83
84
|
# File 'lib/redis/dist_redis.rb', line 80
def on_each_node(command, *args)
@ring.nodes.each do |red|
red.send(command, *args)
end
end
|
#quit ⇒ Object
58
59
60
|
# File 'lib/redis/dist_redis.rb', line 58
def quit
on_each_node :quit
end
|
#save ⇒ Object
50
51
52
|
# File 'lib/redis/dist_redis.rb', line 50
def save
on_each_node :save
end
|