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 |