Awesome
Name
lua-resty-kyototycoon - Lua Kyototycoon client driver for ngx_lua based on the cosocket API
Status
This library is still experimental and under early development.
Description
Lua client driver for KyotoTycoon using its binary protocol.
Kyototycoon's binary protocol: http://fallabs.com/kyototycoon/spex.html#protocol
Example
location /kttest {
content_by_lua '
local kt = require "resty.kyototycoon.binary"
local ktc, err = kt:new()
if not ktc then
ngx.say("failed to instantiate ktc: ", err)
return
end
ktc:set_timeout(1000) -- 1 sec
local ok, err = ktc:connect("127.0.0.1", 1978)
if not ok then
ngx.say("failed to connect: ", err)
return
end
-- set
local num, err = ktc:set_bulk {
{"aaa", 23, 600},
{"bbb", "BBB", 100},
{"ccc", "CCC"}}
-- local num, err = ktc:set("aaa", 23)
if not num then
ngx.say("fail to set data: ", err)
return
end
ngx.say("# of stored= ", num)
-- get
local tab, err = ktc:get_bulk{"aaa", "bbb", "ccc"}
if not tab then
ngx.say("fail to get data: ", err)
return
end
for i, v in ipairs(tab) do
ngx.say(v.dbidx, " ", v.xt, " ", v.key, " ", v.value)
end
--[[
local val, err = ktc:get("aaa") -- {key="aaa"}
if not val then
ngx.say("fail to get data: ", err)
return
end
ngx.say(val)
--]]
-- play_script
-- http://fallabs.com/kyototycoon/luadoc/
-- $ ktserver -scr myscript.lua
local tab = { {key="key", value="aaa"} }
local results, err = ktc:play_script("get", tab)
if not results then
ngx.say("fail to play script: ", err)
return
end
for i, v in ipairs(results) do
ngx.say(v.key, " ", v.value)
end
-- remove
num, err = ktc:remove_bulk{"aaa", "bbb", "ccc"}
if not num then
ngx.say("fail to remove data: ", err)
return
end
-- num, err = ktc:remove("aaa")
local ok, err = ktc:close()
if not ok then
ngx.say("failed to close: ", err)
return
end
';
}
Methods
new
syntax: ktc, err = kt:new(opts?)
Creates a kyototycoon object. In case of failures, returns nil
and a string describing the error.
It accepts an optional opts
table argument.
connect
syntax: ok, err = ktc:connect(host, port)
syntax: ok, err = ktc:connect("unix:/path/to/unix.sock")
Attempts to connect to the remote host and port that the kyototycoon server is listening to or a local unix domain socket file listened by the kyototycoon server.
Before actually resolving the host name and connecting to the remote backend, this method will always look up the connection pool for matched idle connections created by previous calls of this method.
play_script
set_bulk
set
syntax: ok, err = ktc:set(key, value, exptime)
Inserts an entry into kyototycoon unconditionally. If the key already exists, overrides it.
The exptime
parameter is optional, defaults to 0xffffffff
.
remove_bulk
remove
syntax: ok, err = ktc:remove(key)
Deletes the key from kyototycoon immediately.
The key to be deleted must already exist in kyototycoon.
In case of success, returns 1
. In case of errors, returns nil
with a string describing the error.
get_bulk
get
syntax: value, err = ktc:get(key)
Get a single entry in the kytotycoon server via a single key.
The key's value will be returned if the entry is found and no error happens.
In case of errors, nil
values will be turned for decribing the error.
If the entry is not found, then three nil
values will be returned.
set_timeout
syntax: ok, err = ktc:set_timeout(time)
Sets the timeout (in ms) protection for subsequent operations, including the connect
method.
Returns 1 when successful and nil plus a string describing the error otherwise.
set_keepalive
syntax: ok, err = ktc:set_keepalive(max_idle_timeout, pool_size)
Puts the current kyototycoon connection immediately into the ngx_lua cosocket connection pool.
You can specify the max idle timeout (in ms) when the connection is in the pool and the maximal size of the pool every nginx worker process.
In case of success, returns 1
. In case of errors, returns nil
with a string describing the error.
Only call this method in the place you would have called the close
method instead. Calling this method will immediately turn the current kyototycoon object into the closed
state. Any subsequent operations other than connect()
on the current objet will return the closed
error.
get_reused_times
syntax: times, err = ktc:get_reused_times()
This method returns the (successfully) reused times for the current connection. In case of error, it returns nil
and a string describing the error.
If the current connection does not come from the built-in connection pool, then this method always returns 0
, that is, the connection has never been reused (yet). If the connection comes from the connection pool, then the return value is always non-zero. So this method can also be used to determine if the current connection comes from the pool.
close
syntax: ok, err = ktc:close()
Closes the current kyototycoon connection and returns the status.
In case of success, returns 1
. In case of errors, returns nil
with a string describing the error.
Authors
Soojin Nam jsunam@gmail.com