]>
git.saurik.com Git - redis.git/blob - client-libraries/ruby/lib/dist_redis.rb
5 def initialize(opts
={})
9 timeout
= opts
[:timeout] || nil
11 raise Error
, "No hosts given" unless opts
[:hosts]
13 opts
[:hosts].each
do |h
|
14 host
, port
= h
.split(':')
15 hosts
<< Redis
.new(:host => host
, :port => port
, :db => db
, :timeout => timeout
)
18 @ring = HashRing
.new hosts
22 key
= $1 if key
=~
/\{(.*)?\}/
26 def add_server(server
)
27 server
, port
= server
.split(':')
28 @ring.add_node Redis
.new(:host => server
, :port => port
)
31 def method_missing(sym
, *args
, &blk
)
32 if redis
= node_for_key(args
.first
.to_s
)
33 redis
.send sym
, *args
, &blk
40 @ring.nodes
.map
do |red
|
58 on_each_node
:flush_all
60 alias_method
:flushall, :flush_all
63 on_each_node
:flush_db
65 alias_method
:flushdb, :flush_db
68 @ring.nodes
.each
do |red
|
69 red
.keys("*").each
do |key
|
75 def on_each_node(command
, *args
)
76 @ring.nodes
.each
do |red
|
77 red
.send(command
, *args
)
86 r
= DistRedis
.new
'localhost:6379', 'localhost:6380', 'localhost:6381', 'localhost:6382'
89 r
['urmom1'] = 'urmom1'
90 r
['urdad1'] = 'urdad1'
91 r
['urmom2'] = 'urmom2'
92 r
['urdad2'] = 'urdad2'
93 r
['urmom3'] = 'urmom3'
94 r
['urdad3'] = 'urdad3'
104 r
.push_tail
'listor', 'foo1'
105 r
.push_tail
'listor', 'foo2'
106 r
.push_tail
'listor', 'foo3'
107 r
.push_tail
'listor', 'foo4'
108 r
.push_tail
'listor', 'foo5'
110 p r
.pop_tail('listor')
111 p r
.pop_tail('listor')
112 p r
.pop_tail('listor')
113 p r
.pop_tail('listor')
114 p r
.pop_tail('listor')
116 puts
"key distribution:"
118 r
.ring
.nodes
.each
do |red
|
119 p
[red
.port
, red
.keys("*")]