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
							 |