Class: EventMachine::Hiredis::Client
Instance Attribute Summary
Attributes inherited from BaseClient
#db, #host, #password, #port
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from BaseClient
#auth, #close_connection, #configure, #configure_inactivity_check, #connect, #connected?, #initialize, #pending_commands?, #reconnect!, #reconnect_connection, #select
#emit, #listeners, #on, #remove_all_listeners, #remove_listener
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
in the class EventMachine::Hiredis::BaseClient
Class Method Details
.connect(host = 'localhost', port = 6379) ⇒ Object
5
6
7
|
# File 'lib/em-hiredis/client.rb', line 5
def self.connect(host = 'localhost', port = 6379)
new(host, port).connect
end
|
.load_scripts_from(dir) ⇒ Object
9
10
11
12
13
14
15
16
|
# File 'lib/em-hiredis/client.rb', line 9
def self.load_scripts_from(dir)
Dir.glob("#{dir}/*.lua").each do |f|
name = Regexp.new(/([^\/]*)\.lua$/).match(f)[1]
lua = File.open(f, 'r').read
EM::Hiredis.logger.debug { "Registering script: #{name}" }
EM::Hiredis::Client.register_script(name, lua)
end
end
|
.register_script(name, lua) ⇒ Object
18
19
20
21
22
23
|
# File 'lib/em-hiredis/client.rb', line 18
def self.register_script(name, lua)
sha = Digest::SHA1.hexdigest(lua)
self.send(:define_method, name.to_sym) { |keys, args=[]|
eval_script(lua, sha, keys, args)
}
end
|
Instance Method Details
#eval_script(lua, lua_sha, keys, args) ⇒ Object
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/em-hiredis/client.rb', line 33
def eval_script(lua, lua_sha, keys, args)
df = EM::DefaultDeferrable.new
method_missing(:evalsha, lua_sha, keys.size, *keys, *args).callback(
&df.method(:succeed)
).errback { |e|
if e.kind_of?(RedisError) && e.redis_error.message.start_with?("NOSCRIPT")
self.eval(lua, keys.size, *keys, *args)
.callback(&df.method(:succeed)).errback(&df.method(:fail))
else
df.fail(e)
end
}
df
end
|
#info ⇒ Object
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/em-hiredis/client.rb', line 53
def info
df = method_missing(:info)
df.callback { |response|
info = {}
response.each_line do |line|
key, value = line.split(":", 2)
info[key.to_sym] = value.chomp if value
end
df.succeed(info)
}
df.callback { |info| yield info } if block_given?
df
end
|
#info_commandstats(&blk) ⇒ Object
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/em-hiredis/client.rb', line 67
def info_commandstats(&blk)
hash_processor = lambda do |response|
commands = {}
response.each_line do |line|
command, data = line.split(':')
if data
c = commands[command.sub('cmdstat_', '').to_sym] = {}
data.split(',').each do |d|
k, v = d.split('=')
c[k.to_sym] = v =~ /\./ ? v.to_f : v.to_i
end
end
end
blk.call(commands)
end
method_missing(:info, 'commandstats', &hash_processor)
end
|
#monitor(&blk) ⇒ Object
48
49
50
51
|
# File 'lib/em-hiredis/client.rb', line 48
def monitor(&blk)
@monitoring = true
method_missing(:monitor, &blk)
end
|
#psubscribe(channel) ⇒ Object
102
103
104
|
# File 'lib/em-hiredis/client.rb', line 102
def psubscribe(channel)
raise "Use pubsub client"
end
|
#pubsub ⇒ Object
Gives access to a richer interface for pubsub subscriptions on a separate redis connection
88
89
90
91
92
|
# File 'lib/em-hiredis/client.rb', line 88
def pubsub
@pubsub ||= begin
PubsubClient.new(@host, @port, @password, @db).connect
end
end
|
#punsubscribe(channel) ⇒ Object
106
107
108
|
# File 'lib/em-hiredis/client.rb', line 106
def punsubscribe(channel)
raise "Use pubsub client"
end
|
#register_script(name, lua) ⇒ Object
25
26
27
28
29
30
31
|
# File 'lib/em-hiredis/client.rb', line 25
def register_script(name, lua)
sha = Digest::SHA1.hexdigest(lua)
singleton = class << self; self end
singleton.send(:define_method, name.to_sym) { |keys, args=[]|
eval_script(lua, sha, keys, args)
}
end
|
#subscribe(*channels) ⇒ Object
94
95
96
|
# File 'lib/em-hiredis/client.rb', line 94
def subscribe(*channels)
raise "Use pubsub client"
end
|
#unsubscribe(*channels) ⇒ Object
98
99
100
|
# File 'lib/em-hiredis/client.rb', line 98
def unsubscribe(*channels)
raise "Use pubsub client"
end
|