架构设计 - 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 有一定的开销࿰
相关推荐
Bs_MoneyMagnet1 分钟前
基于springboot+vue的医院陪诊服务预约平台的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring
SimonKing3 分钟前
一个Docker命令,40万首古诗词API开箱即用
java·后端·程序员
青春易逝丶10 分钟前
SpringDataJPA
java·spring·hibernate
某不知名網友18 分钟前
C++ 深浅拷贝:从默认拷贝到 Rule of Five
java·开发语言
青山木22 分钟前
Hot 100 --- 划分字母区间
java·数据结构·算法·leetcode·贪心算法
Zzzzmo_25 分钟前
SpringBoot 配置文件
java·spring boot
君顾130 分钟前
外卖CPS小程序开发实战指南:从零到上线的完整流程
java·开发语言·外卖
無a伟30 分钟前
RabbitMq高级特性:消息确认,持久化,重试机制
java·分布式·rabbitmq
流烟默40 分钟前
xxl-job 接入 Spring 的两种方式:手动装配与自动装配(含 initMethod 双启动踩坑实录)
java·spring·xxl-job
鹅城剑仙41 分钟前
Spring Boot 3 全局异常处理与统一响应封装进阶实战
java·spring boot·后端