nginx做反向代理,可以使用lua做缓存处理,但是lua根据key存储比较麻烦,可以使用Redis,这样lua只读取Redis的数据,如果Redis没有缓存时,就直接请求。
读Redis数据
local args = ngx.req.get_uri_args()
local id =args["id"]
local cache = redis:new()
local ok,err cache::connect("127.0.0.1","6379")
local item_model = cache:get("item_"..id)
if item_model == nginx.null or item_model == nil then
local resp = ngx.location.capture("/item/get?id="..id)
item_model = resp.body
end
ngx.say(item_model)
nginx配置
localtion / {
default_type "application/json";
content_by_lua_file ../lua/item_redis.lua
}
lua做缓存数据
# 定义shared存储名称以及大小
lua_shared_dict my_cache 128m
location / {
content_type "text/html";
content_by_lua_file ../lua/item.lua
}
function get_from_cache(key)
local cache_ngx=ngx.shared.my_cache
local value = cache_mgx.get(key)
return value
end
function set_to_cache(key,value,exptime)
if not exptime then
exptime = 0
end
local cache_ngx = ngx.shared.my_cache
local succ,err,forcible = cache_ngx:set(key,value,exptime)
return succ
end
local args = ngx.req.get_uri_args()
local id args["id"]
local item_model =get_from_cache("item"..id)
if item_model == nil then
local resp = ngx.location.capture("/item/get?id="..id)
item_model = resp.body
set_to_cache("item_"..id,item_model,1*60)
end
ngx.say(item_model)