前言
本文章环境请前往:https://cloud.tencent.com/developer/article/2311169
意义:浏览器运行lua文件,实现多级缓存
多级缓存:Nginx-Redis-Mysql
简说:Nginx先自已找,没找到去Redis找数据,Redis没找到去Mysql找,Mysql找到返回Redis。
下次Nginx没找到去Redis找,然后存入Nginx,但网页返回的是Redis的。
再下次,Nginx就自已找到了,Nginx本身似乎只存1分钟
一句话
Lua文件,注意看注释
代码语言:javascript复制ngx.header.content_type="application/json;charset=utf8"
local uri_args = ngx.req.get_uri_args()
--cid是根据id查询数据库,必须穿,不穿网页报500
local cid = uri_args['cid']
--获取nginx缓存对象
local ngxCache = ngx.shared.my_cache
--获取nginx存在缓存数据
local ngxData = ngxCache:get('content:'..cid)
if ngxData=="" or ngxData==nil then
--如果nginx没有数据,就去redis找
local redisModel = require("resty.redis")
local redis = redisModel.new()
redis:set_timeout(1000)
local ok = redis:connect('127.0.0.1',6379)
redis:select(0)
local redisData = redis:get("content:"..cid);
if ngx.null==redisData then
--如果redis没有,就去数据库查
local mysqlModel = require("resty.mysql")
local db = mysqlModel:new()
db:set_timeout(1000)
--database表名,user数据库账号,password数据库密码
local ok = db:connect{
host="127.0.0.1",
port=3306,
database="shop_content",
user="root",
password="ok"
}
if not ok then
ngx.say('链接失败')
db:close()
return false;
end
--查询语句,根据cid查询
res = db:query("SELECT * FROM `tb_content` WHERE category_id="..cid)
local cjson = require("cjson")
local jsonVal = cjson.encode(res)
ngx.say("================>DB")
ngx.say(jsonVal)
--mysql查的数据放入redis中,下次查会去redis
redis:set("content:"..cid,jsonVal)
else
ngx.say("================>redis")
ngx.say(redisData)
--存放到nginx
ngxCache:set('content:'..cid,redisData,60)
end
else
ngx.say("================>nginx")
ngx.say(ngxData)
end