Nginx是大型架构的核心,下面我重点详解Nginx缓存@mikechen
Nginx缓存
Nginx 缓存:是构建高并发架构的“核武器”。

它通过将后端服务器(如 Tomcat、PHP-FPM)处理后的结果存储在本地。
让后续相同的请求直接由 Nginx 响应,从而实现毫秒级的访问速度。
Nginx缓存工作原理
Nginx作为高性能反向代理/HTTP服务器,其缓存机制主要基于代理缓存(proxy_cache)与FastCGI缓存(fastcgi_cache)。
通过将上游服务器响应存储于本地磁盘或内存,以减少对后端的请求频率与响应延迟。

其工作流程如下:
请求拦截:客户端发起请求,Nginx 首先检查本地缓存目录下是否存在该请求的“指纹”(URL 的 MD5 摘要)。
命中(Hit):如果缓存存在且未过期,直接读取磁盘文件并返回,不触发后端请求。
缺失/过期(Miss/Expired):如果不存在或已过期,Nginx 将请求转发给后端服务器。
获取数据后一方面返回给客户端,另一方面异步存入本地磁盘。
Nginx缓存实战案例
Nginx缓存,适用于典型的高并发Web应用场景。
http {
# 定义缓存存储路径、层级、内存区域大小、磁盘上限、过期时间
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:100m
max_size=10g inactive=60m use_temp_path=off;
server {
location /api/ {
proxy_cache my_cache; # 启用名为 my_cache 的空间
proxy_cache_key $host$uri$is_args$args; # 定义缓存唯一标识
# 针对不同状态码设置缓存时间
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
# 添加命中状态响应头(方便调试)
add_header Nginx-Cache "$upstream_cache_status";
proxy_pass http://backend_server;
}
}
}
缓存锁(Cache Lock): 当缓存过期时,如果有 1000 个并发请求进来,proxy_cache_lock on。
会确保只有一个请求去后端取数据,其他 999 个等待该请求完成后直接读取缓存,防止缓存击穿。
陈旧数据兜底(Stale Content): proxy_cache_use_stale error timeout updating;。
当后端服务器宕机时,Nginx 依然可以返回过期的缓存内容给用户,确保服务不中断。
零拷贝与异步 IO: 配合 sendfile on; 和 aio on。
提升从磁盘读取缓存文件并发送到网卡的效率。
