Created
September 24, 2019 12:15
-
-
Save hangj/bb46600d21128ab6f7b32e1bf27297e0 to your computer and use it in GitHub Desktop.
a little wrapper for lua-resty-redis.lua
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment