架构设计 - Nginx Lua 缓存配置

摘要:

web 应用业务缓存通常3级:

一级缓存:JVM 本地缓存

二级缓存:Redis集中式缓存

三级缓存:Nginx Proxy Cache 缓存 或 Nginx Lua 缓存

四级缓存:静态资源CDN缓存 页面静态化

本文主要分享 Nginx Lua 缓存配置开发

鉴于 Nginx Proxy Cache 缓存的劣势,在生产项目中很少使用,如果真正要体现出在距离用户最近的位置设置缓存,需要使用 Nginx Lua 缓存,才能发挥出缓存的优势。

Lua 脚本语言出现前,需要使用 c 或 c++ 语言开发Nginx功能,难度大,风险高。Nginx和Lua集成后,可以通过 Lua 脚本配置 Nignx 。

Nginx Lua 脚本开发的优势:

协程机制

  • 协程是线程内独立的运行单元,依附于线程的内存模型,切换开销小。
  • 完全可以使用同步方式编写代码,不需要考虑异步机制。如果执行过程中遇到了类似IO的阻塞事件,会到Nginx异步模型epoll上注册回调句柄,让出cpu执行权。如果异步模型接收到阻塞事件调用的返回后,唤醒对应的协程。
  • 对共享变量的访问,都无需加锁。

Lua 的协程机制 类似于 Nginx 的协程机制。

Nginx 协程

  • nginx 每个worker进程都是在epoll或kqueue这种事件模型之上,封闭成协程。
  • 每个请求都有一个协程处理
  • 即使 ngx_lua 相对 C 有一定的开销࿰
相关推荐
彭于晏Yan几秒前
Springboot实现数据脱敏
java·spring boot·后端
luming-026 分钟前
java报错解决:sun.net.utils不存
java·经验分享·bug·.net·intellij-idea
北海有初拥14 分钟前
Python基础语法万字详解
java·开发语言·python
alonewolf_9917 分钟前
Spring IOC容器扩展点全景:深入探索与实践演练
java·后端·spring
super_lzb20 分钟前
springboot打war包时将外部配置文件打入到war包内
java·spring boot·后端·maven
毛小茛21 分钟前
芋道管理系统学习——项目结构
java·学习
微凉的衣柜27 分钟前
Windows Server 使用 Nginx 反向代理实现域名访问内网 Gradio 应用
运维·windows·nginx
东北小狐狸-Hellxz38 分钟前
解决java客户端连接ssh失败问题
java·网络·ssh
悟能不能悟38 分钟前
HttpServletRequest request获取整个headers有什么方法
java
__万波__39 分钟前
二十三种设计模式(二十)--解释器模式
java·设计模式·解释器模式