class DistRedis
def add_server(server)
def add_server(server) server, port = server.split(':') @ring.add_node Redis.new(:host => server, :port => port) end
def bgsave
def bgsave on_each_node :bgsave end
def delete_cloud!
def delete_cloud! @ring.nodes.each do |red| red.keys("*").each do |key| red.delete key end end end
def flush_all
def flush_all on_each_node :flush_all end
def flush_db
def flush_db on_each_node :flush_db end
def initialize(opts={})
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) end @ring = HashRing.new hosts end
def keys(glob)
def keys(glob) @ring.nodes.map do |red| red.keys(glob) end end
def method_missing(sym, *args, &blk)
def method_missing(sym, *args, &blk) if redis = node_for_key(args.first.to_s) redis.send sym, *args, &blk else super end end
def node_for_key(key)
def node_for_key(key) key = $1 if key =~ /\{(.*)?\}/ @ring.get_node(key) end
def on_each_node(command, *args)
def on_each_node(command, *args) @ring.nodes.each do |red| red.send(command, *args) end end
def quit
def quit on_each_node :quit end
def save
def save on_each_node :save end