lua-resty-kyototycoon
使用二进制协议的 KyotoTycoon Lua 客户端驱动程序
$ opm get sjnam/lua-resty-kyototycoon
名称
lua-resty-kyototycoon - 基于 cosocket API 的 ngx_lua 用 Lua KyotoTycoon 客户端驱动程序
状态
此库仍处于实验阶段,并且处于早期开发阶段。
描述
使用二进制协议的 KyotoTycoon Lua 客户端驱动程序。
KyotoTycoon 的二进制协议:http://fallabs.com/kyototycoon/spex.html#protocol
示例
`` lua 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
';
}
C<>``
方法
new
语法:ktc, err = kt:new(opts?)
创建一个 kyototycoon 对象。如果失败,则返回 nil
和描述错误的字符串。
它接受一个可选的 opts
表格参数。
connect
语法:ok, err = ktc:connect(host, port)
语法:ok, err = ktc:connect("unix:/path/to/unix.sock")
尝试连接到 kyototycoon 服务器正在监听的远程主机和端口,或 kyototycoon 服务器监听的本地 Unix 域套接字文件。
在实际解析主机名并连接到远程后端之前,此方法将始终查找连接池以匹配此方法先前调用创建的空闲连接。
play_script
set_bulk
set
语法:ok, err = ktc:set(key, value, exptime)
无条件地将条目插入 kyototycoon。如果键已存在,则覆盖它。
exptime
参数是可选的,默认为 0xffffffff
。
remove_bulk
remove
语法:ok, err = ktc:remove(key)
立即从 kyototycoon 中删除键。
要删除的键必须已存在于 kyototycoon 中。
如果成功,则返回 1
。如果发生错误,则返回 nil
和描述错误的字符串。
get_bulk
get
语法:value, err = ktc:get(key)
通过单个键获取 kytotycoon 服务器中的单个条目。
如果找到条目并且没有发生错误,则将返回键的值。
如果发生错误,则将返回 nil
值以描述错误。
如果未找到条目,则将返回三个 nil
值。
set_timeout
语法:ok, err = ktc:set_timeout(time)
为后续操作(包括 connect
方法)设置超时(以毫秒为单位)保护。
成功时返回 1,否则返回 nil 和描述错误的字符串。
set_keepalive
语法:ok, err = ktc:set_keepalive(max_idle_timeout, pool_size)
将当前 kyototycoon 连接立即放入 ngx_lua cosocket 连接池中。
您可以指定连接在池中的最大空闲超时(以毫秒为单位)以及每个 nginx 工作进程池的最大大小。
如果成功,则返回 1
。如果发生错误,则返回 nil
和描述错误的字符串。
仅在您本来会调用 close
方法的地方调用此方法。调用此方法将立即将当前 kyototycoon 对象置于 closed
状态。除了 connect()
之外的任何后续操作都会在当前对象上返回 closed
错误。
get_reused_times
语法:times, err = ktc:get_reused_times()
此方法返回当前连接的(成功)重复使用次数。如果发生错误,则返回 nil
和描述错误的字符串。
如果当前连接不是来自内置连接池,则此方法始终返回 0
,也就是说,该连接从未被重复使用过(尚未)。如果连接来自连接池,则返回值始终非零。因此,此方法也可以用来确定当前连接是否来自池。
close
语法:ok, err = ktc:close()
关闭当前的 kyototycoon 连接并返回状态。
如果成功,则返回 1
。如果发生错误,则返回 nil
和描述错误的字符串。
作者
Soojin Nam <jsunam@gmail.com>
作者
Soojin Nam (sjnam)
许可证
mit
依赖项
luajit
版本
-
使用二进制协议的 KyotoTycoon Lua 客户端驱动程序 2017-02-16 04:01:36