• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

openresty lua-resty-redis 封装 a wrapper for lua-resty-redis 优雅一点点

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

搜了一下别人的封装代码,感觉不够优雅,主要是 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)
		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




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua具名实参发布时间:2022-07-22
下一篇:
Sublime Text 3(中文)添加Lua编译环境发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap