如何使用openresty lua-resty-redis进行Redis封装?

2026-05-21 09:375阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计349个文字,预计阅读时间需要2分钟。

如何使用openresty lua-resty-redis进行Redis封装?

搜索了一些别人的封装代码,感觉不够优雅。主要问题是+set_keepalive+的调用时机不太合适。我自己下面的代码是利用+coroutine+,每次+phase+结束时自动调用+set_keepalive+。local redis=require(resty.red)

搜了一下别人的封装代码,感觉不够优雅,主要是 set_keepalive 的调用时机不太好
我自己下面的代码是利用 coroutine, 每次当前 phase 结束后自动调用 set_keepalive

如何使用openresty lua-resty-redis进行Redis封装?

local redis = require "resty.redis" local M = {} local function set_keepalive(p, red, opts) while true do if 'dead' == coroutine.status(p) then break end ngx.sleep(0.01) end ok, err = red:set_keepalive(opts.freetime, opts.poolsize) if not ok then ngx.log(ngx.ERR, "failed to set keepalive: ", err) return end end function M:new(opts) opts = opts or {} opts.ip = opts.ip or '127.0.0.1' opts.port = opts.port or 6379 opts.db = opts.db or 0 opts.timeout = opts.timeout or 1000 opts.poolsize = opts.poolsize or 100 -- 连接池大小 100 个 opts.freetime = opts.freetime or 10 * 1000 -- 最大空闲时间 10s local red = redis:new() red:set_timeout(opts.timeout) local ok, err = red:connect(opts.ip, opts.port) if not ok then ngx.log(ngx.ERR, "failed to connect redis: ", err) return ok, err end -- local count, err = red:get_reused_times() -- ngx.log(ngx.ERR, "redis get_reused_times: ", count) local ok, err = red:select(opts.db) if not ok then ngx.log(ngx.ERR, "failed to select redis db: ", err) return ok, err end local t, err = ngx.thread.spawn(set_keepalive, coroutine.running(), red, opts) if not t then ngx.log(ngx.ERR, "failed to spawn thread set_keepalive: ", err) return t, err end return red end return M

本文共计349个文字,预计阅读时间需要2分钟。

如何使用openresty lua-resty-redis进行Redis封装?

搜索了一些别人的封装代码,感觉不够优雅。主要问题是+set_keepalive+的调用时机不太合适。我自己下面的代码是利用+coroutine+,每次+phase+结束时自动调用+set_keepalive+。local redis=require(resty.red)

搜了一下别人的封装代码,感觉不够优雅,主要是 set_keepalive 的调用时机不太好
我自己下面的代码是利用 coroutine, 每次当前 phase 结束后自动调用 set_keepalive

如何使用openresty lua-resty-redis进行Redis封装?

local redis = require "resty.redis" local M = {} local function set_keepalive(p, red, opts) while true do if 'dead' == coroutine.status(p) then break end ngx.sleep(0.01) end ok, err = red:set_keepalive(opts.freetime, opts.poolsize) if not ok then ngx.log(ngx.ERR, "failed to set keepalive: ", err) return end end function M:new(opts) opts = opts or {} opts.ip = opts.ip or '127.0.0.1' opts.port = opts.port or 6379 opts.db = opts.db or 0 opts.timeout = opts.timeout or 1000 opts.poolsize = opts.poolsize or 100 -- 连接池大小 100 个 opts.freetime = opts.freetime or 10 * 1000 -- 最大空闲时间 10s local red = redis:new() red:set_timeout(opts.timeout) local ok, err = red:connect(opts.ip, opts.port) if not ok then ngx.log(ngx.ERR, "failed to connect redis: ", err) return ok, err end -- local count, err = red:get_reused_times() -- ngx.log(ngx.ERR, "redis get_reused_times: ", count) local ok, err = red:select(opts.db) if not ok then ngx.log(ngx.ERR, "failed to select redis db: ", err) return ok, err end local t, err = ngx.thread.spawn(set_keepalive, coroutine.running(), red, opts) if not t then ngx.log(ngx.ERR, "failed to spawn thread set_keepalive: ", err) return t, err end return red end return M