]> git.saurik.com Git - redis.git/blobdiff - client-libraries/ruby/lib/dist_redis.rb
It is now possible to specify - as config file name to read it from stdin
[redis.git] / client-libraries / ruby / lib / dist_redis.rb
index 04505c2003f630ff21d70621b2bb5ce029d40abc..830f8b6de3bef56ecf543e7ee959a18a5cdcd5f6 100644 (file)
@@ -2,13 +2,20 @@ require 'redis'
 require 'hash_ring'
 class DistRedis
   attr_reader :ring
-  def initialize(*servers)
-    srvs = []
-    servers.each do |s|
-      server, port = s.split(':')
-      srvs << Redis.new(:host => server, :port => port)
+  def initialize(opts={})
+    hosts = []
+    
+    db = opts[:db] || nil
+    timeout = opts[:timeout] || nil 
+
+    raise Error, "No hosts given" unless opts[:hosts]
+
+    opts[:hosts].each do |h|
+      host, port = h.split(':')
+      hosts << Redis.new(:host => host, :port => port, :db => db, :timeout => timeout, :db => db)
     end
-    @ring = HashRing.new srvs
+
+    @ring = HashRing.new hosts 
   end
   
   def node_for_key(key)
@@ -24,7 +31,7 @@ class DistRedis
   end
   
   def method_missing(sym, *args, &blk)
-    if redis = node_for_key(args.first)
+    if redis = node_for_key(args.first.to_s)
       redis.send sym, *args, &blk
     else
       super
@@ -94,11 +101,11 @@ r = DistRedis.new 'localhost:6379', 'localhost:6380', 'localhost:6381', 'localho
   r.push_tail 'listor', 'foo4'
   r.push_tail 'listor', 'foo5'
   
-  p r.pop_tail 'listor'
-  p r.pop_tail 'listor'
-  p r.pop_tail 'listor'
-  p r.pop_tail 'listor'
-  p r.pop_tail 'listor'
+  p r.pop_tail('listor')
+  p r.pop_tail('listor')
+  p r.pop_tail('listor')
+  p r.pop_tail('listor')
+  p r.pop_tail('listor')
   
   puts "key distribution:"