架构设计 - 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 有一定的开销࿰
相关推荐
索荣荣7 小时前
Maven配置文件(pom.xml)终极指南
java·开发语言
代码栈上的思考8 小时前
SpringBoot 拦截器
java·spring boot·spring
送秋三十五8 小时前
一次大文件处理性能优化实录————Java 优化过程
java·开发语言·性能优化
雨中飘荡的记忆8 小时前
千万级数据秒级对账!银行日终批处理对账系统从理论到实战
java
jbtianci8 小时前
Spring Boot管理用户数据
java·spring boot·后端
Sylvia-girl8 小时前
线程池~~
java·开发语言
编程彩机8 小时前
互联网大厂Java面试:从Jakarta EE到微服务架构的技术场景深度解读
spring boot·分布式事务·微服务架构·java面试·jakarta ee
魔力军8 小时前
Rust学习Day3: 3个小demo实现
java·学习·rust
luffy54598 小时前
windows下通过docker-desktop创建redis实例
windows·redis·docker·容器
时艰.8 小时前
java性能调优 — 高并发缓存一致性
java·开发语言·缓存