Class: DistRedis

Inherits:
Object
  • Object
show all
Defined in:
lib/dist_redis.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*servers) ⇒ DistRedis

Returns a new instance of DistRedis.



5
6
7
8
9
10
11
12
# File 'lib/dist_redis.rb', line 5

def initialize(*servers)
  srvs = []
  servers.each do |s|
    server, port = s.split(':')
    srvs << Redis.new(:host => server, :port => port)
  end
  @ring = HashRing.new srvs
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(sym, *args, &blk) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/dist_redis.rb', line 26

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

#ringObject (readonly)

Returns the value of attribute ring.



4
5
6
# File 'lib/dist_redis.rb', line 4

def ring
  @ring
end

Instance Method Details

#add_server(server) ⇒ Object



21
22
23
24
# File 'lib/dist_redis.rb', line 21

def add_server(server)
  server, port = server.split(':')
  @ring.add_node Redis.new(:host => server, :port => port)
end

#bgsaveObject



48
49
50
51
52
# File 'lib/dist_redis.rb', line 48

def bgsave
  @ring.nodes.each do |red|
    red.bgsave
  end
end

#delete_cloud!Object



60
61
62
63
64
65
66
# File 'lib/dist_redis.rb', line 60

def delete_cloud!
  @ring.nodes.each do |red|
    red.keys("*").each do |key|
      red.delete key
    end  
  end
end

#keys(glob) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/dist_redis.rb', line 34

def keys(glob)
  keyz = []
  @ring.nodes.each do |red|
    keyz.concat red.keys(glob)
  end
  keyz
end

#node_for_key(key) ⇒ Object



14
15
16
17
18
19
# File 'lib/dist_redis.rb', line 14

def node_for_key(key)
  if key =~ /\{(.*)?\}/
    key = $1
  end
  @ring.get_node(key)
end

#quitObject



54
55
56
57
58
# File 'lib/dist_redis.rb', line 54

def quit
  @ring.nodes.each do |red|
    red.quit
  end
end

#saveObject



42
43
44
45
46
# File 'lib/dist_redis.rb', line 42

def save
  @ring.nodes.each do |red|
    red.save
  end
end