Skip to content

Instantly share code, notes, and snippets.

@hangj
Created September 24, 2019 12:15
Show Gist options
  • Save hangj/bb46600d21128ab6f7b32e1bf27297e0 to your computer and use it in GitHub Desktop.
Save hangj/bb46600d21128ab6f7b32e1bf27297e0 to your computer and use it in GitHub Desktop.
a little wrapper for lua-resty-redis.lua
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