前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenResty+Redis+Mysql+Lua实现多级缓存(浏览器版)

OpenResty+Redis+Mysql+Lua实现多级缓存(浏览器版)

作者头像
贫困的蚊子
发布2023-08-10 12:33:44
2650
发布2023-08-10 12:33:44
举报
文章被收录于专栏:贫困的蚊子贫困的蚊子

前言

本文章环境请前往: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 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 一句话
    相关产品与服务
    云数据库 MySQL
    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档