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
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