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

版本