58 lines
1.6 KiB
Lua
58 lines
1.6 KiB
Lua
-- 导入redis的Lua模块
|
||
local redis = require('resty.redis')
|
||
-- 初始化redis
|
||
local red = redis:new()
|
||
red:set_timeouts(1000, 1000, 1000)
|
||
|
||
-- 关闭redis连接的工具方法,其实是放入连接池
|
||
local function close_redis(red)
|
||
local pool_max_idle_time = 10000 -- 连接的空闲时间,单位是毫秒
|
||
local pool_size = 100 --连接池大小
|
||
local ok, err = red:set_keepalive(pool_max_idle_time, pool_size)
|
||
if not ok then
|
||
ngx.log(ngx.ERR, "放入redis连接池失败: ", err)
|
||
end
|
||
end
|
||
|
||
-- 查询redis的方法 ip和port是redis地址,key是查询的key
|
||
local function read_redis(ip, port, key)
|
||
-- 获取一个连接
|
||
local ok, err = red:connect(ip, port)
|
||
if not ok then
|
||
ngx.log(ngx.ERR, "连接redis失败 : ", err)
|
||
return nil
|
||
end
|
||
-- 查询redis
|
||
local resp, err = red:get(key)
|
||
-- 查询失败处理
|
||
if not resp then
|
||
ngx.log(ngx.ERR, "查询Redis失败: ", err, ", key = " , key)
|
||
end
|
||
--得到的数据为空处理
|
||
if resp == ngx.null then
|
||
resp = nil
|
||
ngx.log(ngx.ERR, "查询Redis数据为空, key = ", key)
|
||
end
|
||
close_redis(red)
|
||
return resp
|
||
end
|
||
|
||
-- 封装函数,发送http请求,并解析响应
|
||
local function read_http(path, params)
|
||
local resp = ngx.location.capture(path,{
|
||
method = ngx.HTTP_GET,
|
||
args = params,
|
||
})
|
||
if not resp then
|
||
-- 记录错误信息,返回404
|
||
ngx.log(ngx.ERR, "http查询失败, path: ", path , ", args: ", args)
|
||
ngx.exit(404)
|
||
end
|
||
return resp.body
|
||
end
|
||
-- 将方法导出
|
||
local _M = {
|
||
read_http = read_http,
|
||
read_redis = read_redis
|
||
}
|
||
return _M |