前几篇博文我们介绍了三级缓存架构的内容,并且实现了基于Nginx的定向请求分发的功能,那么接下来我们依次来编写Nginx缓存,redis缓存和Tomcat堆缓存的代码实现
参考之前的博文
- SpringBoot+Redis+MemCache+Nginx+Lua实现三级缓存架构(一)——三级缓存架构体系
- SpringBoot+Redis+MemCache+Nginx+Lua实现三级缓存架构(二)——Nginx环境安装和整合Lua
- SpringBoot+Redis+MemCache+Nginx+Lua实现三级缓存架构(三)——Nginx+Lua实现定向请求分发
本博文今天主要基于Nginx+Lua+Redis+Cache实现三级缓存架构的代码实现,使用的平台代码,我们可以直接在《缓存与数据库双写一致性的解决方案——附上代码解决方案》的框架基础上来实现,具体的代码可以参考Gitee上的 《doubleWriterConsistence》
第一篇博文已经整理了三级架构的业务逻辑,为了方便接下来我们代码的开发,我们再来整理下三级缓存架构的业务逻辑
- 用户请求过来首先经过Nginx的分发层来分发请求,对于同一访问定向请求到Nginx的应用层
- Nginx应用层接收请求,判断Nginx本地有没有数据
- 如果有数据直接返回给用户,如果没有数据,则向Redis中请求获取数据
- Redis中如果没有数据库,则会向Tomcat堆缓存中获取数据
- 如果Tomcat堆缓存中也没有数据的话,则最终会到数据库中获取数据
- 每层的数据获取都会到将数据保存到上一层的容器里面
Nginx+Lua对服务的定向请求访问
在上一篇博文中,我们规划了三个服务器来作为Nginx的分发层和应用层
服务器 | 用途 |
---|---|
192.168.56.105 | 分发层 |
192.168.56.106 | 应用层 |
192.168.56.107 | 应用层 |
并且已经整理好了Nginx分发层到应用层请求的功能,现在我们来实现Nginx接收分发层的参数,并且请求系统服务的功能
- 搭建Nginx应用层渲染Html的环境
我们需要使用一个html静态界面来展示我们获取的数据,Lua层需要依赖来支持
## 在我们的自定的lualib包中添加依赖支持
cd /home/work/lualib/resty/
## 下载template.lua
wget https://raw.githubusercontent.com/bungle/lua-resty-template/master/lib/resty/template.lua
## 创建html模板的文件夹,放置以后的html模板
mkdir /home/work/lualib/resty/html
## 在该文件夹下,添加html.lua
wget https://raw.githubusercontent.com/bungle/lua-resty-template/master/lib/resty/template/html.lua
然后我们在应用层的nginx.conf中添加访问模板的路径配置
-- vi /home/work/conf/nginx.conf
server {
listen 80;
server_name _;
set $template_location "/templates";
set $template_root "/home/work/templates";
location /lua {
default_type text/html;
content_by_lua_file /home/work/conf/lua/requestDirect.lua;
}
}
## 创建templates的模板目录
mkdir /home/work/templates
## 创建 requestDirect.html
vi requestDirect.html
192.168.56.107
request_direct:{* name *}