加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

openresty lua-resty-redis 封装

发布时间:2020-12-14 21:42:51 所属栏目:大数据 来源:网络整理
导读:搜了一下别人的封装代码,感觉不够优雅,主要是 set_keepalive 的调用时机不太好 我自己下面的代码是利用 coroutine, 每次当前 phase 结束后自动调用 set_keepalive local redis = require "resty.redis"local M = {}local function set_keepalive(p,red,op

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

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
    end

    local t,err = ngx.thread.spawn(set_keepalive,coroutine.running(),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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读