架构设计 - 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 有一定的开销࿰
相关推荐
小bo波21 小时前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
用户3521802454751 天前
🎆从 Prompt 到 Skill:让 Spring AI Agent 学会"装新技能"
人工智能·spring boot·ai编程
nanxun8862 天前
记一次诡异的 Docker 容器"串包"故障排查
java
用户1563068103512 天前
Day01 | Java 基础(Java SE)
java
行者全栈架构师2 天前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师2 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_02 天前
mac(m5)平台编译openjdk
java
ping某3 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
用户3169353811833 天前
Java连接Redis
redis
唐青枫3 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java