-- 自定义的字符串转换工具
local stringEx = require("stringExt")
-- 本地缓存
local local_cache = ngx.shared.my_cache
-- redis连接池,设置连接空闲时间
local function close_redis(red)
if not red then
return
end
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.say("set keepalive fail ",err)
end
end
-- 读redis缓存
local function read_redis(key)
local redis = require("resty.redis")
local red = redis.new();
local ok,err = red:connect("127.0.0.1",8084)
if not ok then
ngx.say("connect fail ",err)
return close_redis(red)
end
red:set_timeout(1000)
local count,err = red:get_reused_times()
if 0==count then
ok,err = red:auth("123456")
if not ok then
ngx.say("auth fail ",err)
return close_redis(red)
end
elseif err then
ngx.say("fail to get reused times")
return close_redis(red)
end
local res,err = red:get(key)
if not res then
ngx.say("get msg fail ",err)
return close_redis(red)
elseif res then
ngx.say(" set expire 10000 ")
red:expire(key,10)
end
local_cache:set(key,res,5)
ngx.say("read from redis ")
ngx.say(res)
close_redis(red)
end
-- http请求参数
local args = ngx.req.get_uri_args()
local key = args["key"]
if not key then
ngx.say("key must be exist")
return
end
local keyCache = local_cache:get(key)
if not keyCache then
local res = read_redis(key)
if not res then
ngx.say("redis is null")
end
else
ngx.say("read from localCache ")
ngx.say(keyCache)
end
-- http调用工具,需要额外下载,地址:https://github.com/ledgetech/lua-resty-http 说明:https://blog.csdn.net/xiejunna/article/details/53445342
local http = require("resty.http")
local httpc = http.new();
if not httpc then
ngx.say("\n\r httpc new fail")
end
httpc:set_timeout(8000)
-- keepalive参数不写可能导致报错
local res,err = httpc:request_uri("http://www.xxx.com",{
method="POST",
path="/xxx/rpc.api",
body = 'a=1&b=2',
headers = {
["Content-Type"] = "application/x-www-form-urlencoded",
},
keepalive_timeout = 60,
keepalive_pool = 10
})
if not res then
ngx.say("httpc call fail ")
return
end
local cjson = require("cjson")
local json = cjson.new()
if not json then
ngx.say("json is null")
return
end
-- 测试调用结果
-- ngx.say(stringEx.TableToStr(res))
-- ngx.say(stringEx.ToStringEx(json.decode(res["body"])))
-- ngx.say(type(json.decode(res["body"])))
-- ngx.say(stringEx.ToStringEx(json.decode(res["body"])["header"]["request_seq"]))
-- ngx.say(type(json.decode(res["body"])["header"]))
-- ngx.say(type(json.decode(res["body"])["header"]["request_seq"]))
local connectMysqlUtil = require("connectMysqlUtil")
local db = connectMysqlUtil.connect()
if not db then
ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
return
end
local res,err,errcode,sqlstate = db:query("select * from t_uls_order_info where order_id='20190119232946000023'",10)
if not res then
ngx.say("bad request: ",err,":",errcode,": ",sqlstate,".")
return
end
ngx.say("result:",json.encode(res))