HM-SpringCloud微服务系列11.3【实现多级缓存】
1. 安装OpenResty
1.1 OpenResty介绍
OpenResty® 是一个基于 Nginx的高性能 Web 平台,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。具备下列特点:
- 具备Nginx的完整功能
- 基于Lua语言进行扩展,集成了大量精良的 Lua 库、第三方模块
- 允许使用Lua自定义业务逻辑、自定义库
官方网站: https://openresty.org/cn/
1.2 centos7安装OpenResty
https://www.cnblogs.com/yppah/p/16215261.html
2. OpenResty快速入门[案例]
2.1 反向代理流程
现在,商品详情页使用的是假的商品数据。不过在浏览器中,可以看到页面有发起ajax请求查询真实商品数据。
这个请求如下:
请求地址是localhost,端口是80,就被windows上安装的Nginx服务给接收到了。然后代理给了OpenResty集群:
我们需要在OpenResty中编写业务,查询商品数据并返回到浏览器。
但是这次,我们先在OpenResty接收请求,返回假的商品数据。
2.2 OpenResty监听请求
OpenResty的很多功能都依赖于其目录下的Lua库,需要在nginx.conf中指定依赖库的目录,并导入依赖:
-
添加对OpenResty的Lua模块的加载
修改
/usr/local/openresty/nginx/conf/nginx.conf
文件,在其中的http下面,添加下面代码:#lua 模块 lua_package_path "/usr/local/openresty/lualib/?.lua;;"; #c模块 lua_package_cpath "/usr/local/openresty/lualib/?.so;;";
-
监听/api/item路径
修改
/usr/local/openresty/nginx/conf/nginx.conf
文件,在nginx.conf的server下面,添加对/api/item这个路径的监听:location /api/item { # 默认的响应类型 default_type application/json; # 响应结果由lua/item.lua文件来决定 content_by_lua_file lua/item.lua; }
这个监听,就类似于SpringMVC中的
@GetMapping("/api/item")
做路径映射。而
content_by_lua_file lua/item.lua
则相当于调用item.lua这个文件,执行其中的业务,把结果返回给用户。相当于java中调用service。
2.3 编写item.lua
-
在
/usr/loca/openresty/nginx
目录创建文件夹:lua -
在
/usr/loca/openresty/nginx/lua
文件夹下,新建文件:item.lua -
编写item.lua,返回假数据
item.lua中,利用ngx.say()函数返回数据到Response中
拷贝原有的假数据,然后稍作修改
ngx.say('{"id":10001,"name":"test","title":"33寸行李箱 820.70.36.4","price":29900,"stock":2999,"sold":31290}')
-
重新加载配置(本地主机 和 远程服务器/虚拟机 的nginx都要重启)
nginx -s reload
-
访问http://localhost/item.html?id=10001测试
当前,本地页面项目nginx配置中的业务集群地址实际上就是OpenResty地址
3. 应用一:请求参数处理
在OpenResty接收前端请求,但是返回的是假数据。
要返回真实数据,必须根据前端传递来的商品id,查询商品信息才可以。
那么如何获取前端传递的商品参数呢?
3.1 获取参数的API
OpenResty中提供了一些API用来获取不同类型的前端请求参数:
3.2 获取参数并返回[案例]
在前端发起的ajax请求如上图,可以看到商品id是以路径占位符方式传递的,因此可以利用正则表达式匹配的方式来获取ID。
3.2.1 获取商品id
修改/usr/loca/openresty/nginx/nginx.conf
文件中监听/api/item的代码,利用正则表达式获取ID:
location ~ /api/item/(\d+) {
# 默认的响应类型
default_type application/json;
# 响应结果由lua/item.lua文件来决定
content_by_lua_file lua/item.lua;
}
3.2.2 拼接ID并返回
修改/usr/loca/openresty/nginx/lua/item.lua
文件,获取id并拼接到结果中返回:
-- 获取路径参数
local id = ngx.var[1]
-- 返回结果
ngx.say('{"id":' .. id .. ',"name":"test","title":"33寸行李箱 820.70.36.4","price":29900,"stock":2999,"sold":31290}')
3.2.3 重新加载并测试
运行命令以重新加载OpenResty配置:
nginx -s reload
此处仅reload虚拟机中的nginx(OpenResty)即可
刷新页面可以看到结果中已经带上了ID(动态):
4. 应用二:查询Tomcat
https://www.cnblogs.com/yppah/p/16219583.html
5. 应用三:Redis缓存预热
https://www.cnblogs.com/yppah/p/16226257.html
6. 应用四:查询Redis缓存
https://www.cnblogs.com/yppah/p/16226273.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!