lua-resty-redis客戶端鏈接池使用

set_keepalive

syntax: ok, err = red:set_keepalive(max_idle_timeout, pool_size)nginx

將當前redis連接放入ngx_lua cosocket連接池,能夠設置鏈接的最大空閒時間每一個nginx工做進程的池的最大數git

若是成功返回1,若是錯誤返回nil,並返回錯誤描述github

注:這個方法用戶替代close方法,調用該方法後,redis連接變爲關閉狀態,除connect()外,當前連接的後續操做都將返回已關閉的錯誤redis

get_reused_times

syntax: times, err = red:get_reused_times()socket

該方法用於返回當前鏈接被成功重用的次數,若是出現錯誤返回nil,並返回錯誤描述lua

若是連接不是來自連接池,此方法返回0(及連接從未被重用,及新建鏈接);若是來自連接池返回值始終大於0;所以該方法能夠用於spa

判斷當前鏈接是否來自鏈接池。rest

能正確使用連接池的redis connect 方法code

function connect(host, port, passwd)
    local red = redis:new()
    red:set_timeout(1000)
    local ok, err = red:connect(host, port)
    if not ok then
        logs.error("can't connect to redis: "..tostring(host)..":"..tostring(port)..' error: '..err )
        return nil
    end
 
    -- 若是訪問redis不須要密碼,這段代碼能夠省略
    if passwd ~= nil and passwd ~= ngx.null then
        local count, err_count = red:get_reused_times() -- 若是須要密碼,來自鏈接池的連接不須要再進行auth驗證;若是不作這個判斷,鏈接池不起做用
        if type(count) == 'number' and count == 0 then
            local ok, err = red:auth(passwd)
            if not ok then
                logs.error("redis auth error: "..tostring(host)..":".. tostring(port)..' error: '..err )
                return nil
            end
        elseif err then
            logs.error("failed to authenticate: ", err_count)
            red:close()
            return nil
        end
    end
 
    return red
end

詳細文檔:https://github.com/openresty/lua-resty-redisblog

相關文章
相關標籤/搜索