Class: KyotoTycoon
- Inherits:
-
Object
show all
- Defined in:
- lib/kyototycoon/stream.rb,
lib/kyototycoon.rb,
lib/kyototycoon/tsvrpc.rb,
lib/kyototycoon/serializer.rb,
lib/kyototycoon/tsvrpc/skinny.rb,
lib/kyototycoon/serializer/default.rb,
lib/kyototycoon/serializer/msgpack.rb
Overview
$ cat foo.rb require “rubygems” require “kyototycoon”
KyotoTycoon::Stream.run($stdin) do |line|
... do some stuff ..
end
$ ktremotemgr slave -uw | ruby foo.rb
Defined Under Namespace
Modules: Serializer, Stream, Tsvrpc
Constant Summary
collapse
- VERSION =
'0.5.3'
- DEFAULT_HOST =
'0.0.0.0'
- DEFAULT_PORT =
1978
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
-
#add(key, value, xt = nil) ⇒ Object
-
#append(key, value, xt = nil) ⇒ Object
-
#cas(key, oldval, newval, xt = nil) ⇒ Object
-
#clear ⇒ Object
-
#client ⇒ Object
-
#decrement(key, num = 1, xt = nil) ⇒ Object
(also: #decr)
-
#echo(value) ⇒ Object
-
#finish ⇒ Object
-
#get(key) ⇒ Object
(also: #[])
-
#get_bulk(keys) ⇒ Object
-
#increment(key, num = 1, xt = nil) ⇒ Object
(also: #incr)
-
#increment_double(key, num, xt = nil) ⇒ Object
-
#initialize(host = DEFAULT_HOST, port = DEFAULT_PORT) ⇒ KyotoTycoon
constructor
A new instance of KyotoTycoon.
-
#keys ⇒ Object
-
#match_prefix(prefix) ⇒ Object
-
#match_regex(re) ⇒ Object
-
#remove(*keys) ⇒ Object
(also: #delete)
-
#remove_bulk(keys) ⇒ Object
-
#replace(key, value, xt = nil) ⇒ Object
-
#report ⇒ Object
-
#request(path, params = nil) ⇒ Object
-
#set(key, value, xt = nil) ⇒ Object
(also: #[]=)
-
#set_bulk(records) ⇒ Object
-
#start ⇒ Object
-
#status ⇒ Object
-
#sync(params = {}) ⇒ Object
(also: #syncronize)
-
#vacuum ⇒ Object
Constructor Details
#initialize(host = DEFAULT_HOST, port = DEFAULT_PORT) ⇒ KyotoTycoon
Returns a new instance of KyotoTycoon.
43
44
45
46
47
48
49
50
|
# File 'lib/kyototycoon.rb', line 43
def initialize(host=DEFAULT_HOST, port=DEFAULT_PORT)
@servers = [[host, port]]
@checked_servers = nil
@serializer = KyotoTycoon::Serializer::Default
@logger = Logger.new(nil)
@colenc = :B
@connect_timeout = 0.5
end
|
Instance Attribute Details
#colenc ⇒ Object
Returns the value of attribute colenc.
18
19
20
|
# File 'lib/kyototycoon.rb', line 18
def colenc
@colenc
end
|
#connect_timeout ⇒ Object
Returns the value of attribute connect_timeout.
18
19
20
|
# File 'lib/kyototycoon.rb', line 18
def connect_timeout
@connect_timeout
end
|
#db ⇒ Object
Returns the value of attribute db.
19
20
21
|
# File 'lib/kyototycoon.rb', line 19
def db
@db
end
|
#logger ⇒ Object
Returns the value of attribute logger.
19
20
21
|
# File 'lib/kyototycoon.rb', line 19
def logger
@logger
end
|
#serializer ⇒ Object
Returns the value of attribute serializer.
19
20
21
|
# File 'lib/kyototycoon.rb', line 19
def serializer
@serializer
end
|
#servers ⇒ Object
Returns the value of attribute servers.
18
19
20
|
# File 'lib/kyototycoon.rb', line 18
def servers
@servers
end
|
Class Method Details
24
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/kyototycoon.rb', line 24
def self.configure(name, host=DEFAULT_HOST, port=DEFAULT_PORT, &block)
@configure ||= {}
if @configure[name]
raise "'#{name}' is registered"
end
@configure[name] = lambda{
kt = KyotoTycoon.new(host, port)
block.call(kt)
kt
}
end
|
.create(name) ⇒ Object
36
37
38
39
40
41
|
# File 'lib/kyototycoon.rb', line 36
def self.create(name)
if @configure[name].nil?
raise "undefined configure: '#{name}'"
end
@configure[name].call
end
|
Instance Method Details
#add(key, value, xt = nil) ⇒ Object
85
86
87
88
|
# File 'lib/kyototycoon.rb', line 85
def add(key, value, xt=nil)
res = request('/rpc/add', {:key => key, :value => @serializer.encode(value), :xt => xt})
Tsvrpc.parse(res[:body], res[:colenc])
end
|
#append(key, value, xt = nil) ⇒ Object
95
96
97
|
# File 'lib/kyototycoon.rb', line 95
def append(key, value, xt=nil)
request('/rpc/append', {:key => key, :value => @serializer.encode(value), :xt => xt})
end
|
#cas(key, oldval, newval, xt = nil) ⇒ Object
99
100
101
102
103
104
105
106
107
|
# File 'lib/kyototycoon.rb', line 99
def cas(key, oldval, newval, xt=nil)
res = request('/rpc/cas', {:key => key, :oval=> @serializer.encode(oldval), :nval => @serializer.encode(newval), :xt => xt})
case res[:status].to_i
when 200
true
when 450
false
end
end
|
#clear ⇒ Object
157
158
159
|
# File 'lib/kyototycoon.rb', line 157
def clear
request('/rpc/clear')
end
|
#client ⇒ Object
229
230
231
232
233
234
|
# File 'lib/kyototycoon.rb', line 229
def client
host, port = *choice_server
@client ||= begin
Tsvrpc::Skinny.new(host, port)
end
end
|
#decrement(key, num = 1, xt = nil) ⇒ Object
Also known as:
decr
115
116
117
|
# File 'lib/kyototycoon.rb', line 115
def decrement(key, num=1, xt=nil)
increment(key, num * -1, xt)
end
|
#echo(value) ⇒ Object
170
171
172
173
|
# File 'lib/kyototycoon.rb', line 170
def echo(value)
res = request('/rpc/echo', value)
Tsvrpc.parse(res[:body], res[:colenc])
end
|
#finish ⇒ Object
240
241
242
|
# File 'lib/kyototycoon.rb', line 240
def finish
client.finish
end
|
#get(key) ⇒ Object
Also known as:
[]
68
69
70
71
|
# File 'lib/kyototycoon.rb', line 68
def get(key)
res = request('/rpc/get', {:key => key})
@serializer.decode(Tsvrpc.parse(res[:body], res[:colenc])['value'])
end
|
#get_bulk(keys) ⇒ Object
135
136
137
138
139
140
141
142
143
144
145
146
|
# File 'lib/kyototycoon.rb', line 135
def get_bulk(keys)
params = keys.inject({}){|params, k|
params[k.to_s.match(/^_/) ? k.to_s : "_#{k}"] = ''
params
}
res = request('/rpc/get_bulk', params)
ret = {}
Tsvrpc.parse(res[:body], res[:colenc]).each{|k,v|
ret[k] = k.match(/^_/) ? @serializer.decode(v) : v
}
ret
end
|
#increment(key, num = 1, xt = nil) ⇒ Object
Also known as:
incr
109
110
111
112
|
# File 'lib/kyototycoon.rb', line 109
def increment(key, num=1, xt=nil)
res = request('/rpc/increment', {:key => key, :num => num, :xt => xt})
Tsvrpc.parse(res[:body], res[:colenc])['num'].to_i
end
|
#increment_double(key, num, xt = nil) ⇒ Object
120
121
122
123
|
# File 'lib/kyototycoon.rb', line 120
def increment_double(key, num, xt=nil)
res = request('/rpc/increment_double', {:key => key, :num => num, :xt => xt})
Tsvrpc.parse(res[:body], res[:colenc])['num'].to_f
end
|
#keys ⇒ Object
210
211
212
|
# File 'lib/kyototycoon.rb', line 210
def keys
match_prefix("")
end
|
#match_prefix(prefix) ⇒ Object
185
186
187
188
189
190
191
192
193
194
|
# File 'lib/kyototycoon.rb', line 185
def match_prefix(prefix)
res = request('/rpc/match_prefix', {:prefix => prefix})
keys = []
Tsvrpc.parse(res[:body], res[:colenc]).each{|k,v|
if k != 'num'
keys << k[1, k.length]
end
}
keys
end
|
#match_regex(re) ⇒ Object
196
197
198
199
200
201
202
203
204
205
206
207
208
|
# File 'lib/kyototycoon.rb', line 196
def match_regex(re)
if re.class == Regexp
re = re.source
end
res = request('/rpc/match_regex', {:regex => re})
keys = []
Tsvrpc.parse(res[:body], res[:colenc]).each{|k,v|
if k != 'num'
keys << k[1, k.length]
end
}
keys
end
|
#remove(*keys) ⇒ Object
Also known as:
delete
74
75
76
|
# File 'lib/kyototycoon.rb', line 74
def remove(*keys)
remove_bulk(keys.flatten)
end
|
#remove_bulk(keys) ⇒ Object
148
149
150
151
152
153
154
155
|
# File 'lib/kyototycoon.rb', line 148
def remove_bulk(keys)
params = keys.inject({}){|params, k|
params[k.to_s.match(/^_/) ? k.to_s : "_#{k}"] = ''
params
}
res = request('/rpc/remove_bulk', params)
Tsvrpc.parse(res[:body], res[:colenc])
end
|
#replace(key, value, xt = nil) ⇒ Object
90
91
92
93
|
# File 'lib/kyototycoon.rb', line 90
def replace(key, value, xt=nil)
res = request('/rpc/replace', {:key => key, :value => @serializer.encode(value), :xt => xt})
Tsvrpc.parse(res[:body], res[:colenc])
end
|
#report ⇒ Object
175
176
177
178
|
# File 'lib/kyototycoon.rb', line 175
def report
res = request('/rpc/report')
Tsvrpc.parse(res[:body], res[:colenc])
end
|
#request(path, params = nil) ⇒ Object
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
# File 'lib/kyototycoon.rb', line 214
def request(path, params=nil)
if @db
params ||= {}
params[:DB] = @db
end
status,body,colenc = client.request(path, params, @colenc)
if ![200, 450].include?(status.to_i)
raise body
end
res = {:status => status, :body => body, :colenc => colenc}
@logger.info("#{path}: #{res[:status]} with query parameters #{params.inspect}")
res
end
|
#set(key, value, xt = nil) ⇒ Object
Also known as:
[]=
79
80
81
82
|
# File 'lib/kyototycoon.rb', line 79
def set(key, value, xt=nil)
res = request('/rpc/set', {:key => key, :value => @serializer.encode(value), :xt => xt})
Tsvrpc.parse(res[:body], res[:colenc])
end
|
#set_bulk(records) ⇒ Object
125
126
127
128
129
130
131
132
133
|
# File 'lib/kyototycoon.rb', line 125
def set_bulk(records)
values = {}
records.each{|k,v|
values["_#{k}"] = @serializer.encode(v)
}
res = request('/rpc/set_bulk', values)
Tsvrpc.parse(res[:body], res[:colenc])
end
|
#start ⇒ Object
236
237
238
|
# File 'lib/kyototycoon.rb', line 236
def start
client.start
end
|
#status ⇒ Object
180
181
182
183
|
# File 'lib/kyototycoon.rb', line 180
def status
res = request('/rpc/status')
Tsvrpc.parse(res[:body], res[:colenc])
end
|
#sync(params = {}) ⇒ Object
Also known as:
syncronize
165
166
167
|
# File 'lib/kyototycoon.rb', line 165
def sync(params={})
request('/rpc/synchronize', params)
end
|
#vacuum ⇒ Object
161
162
163
|
# File 'lib/kyototycoon.rb', line 161
def vacuum
request('/rpc/vacuum')
end
|