Nginx是大厂必备技能,下面我详解Nginx缓存提升性能关键@mikechen
Nginx缓存

在高并发场景中,系统性能瓶颈通常不在 CPU,而在:
数据库 IO;
网络请求;
后端服务响应。
如果每个请求都直达数据库或后端服务,系统很快就会被拖垮。
这时,Nginx 的缓存机制就成了关键。
把“重复请求”直接在入口层拦截并返回,避免进入后端系统。
Nginx缓存原理
缓存的本质:是用快速存储代替重复计算或慢速请求。
Nginx常见的缓存场景包括静态资源缓存、反向代理缓存(proxy_cache)和FastCGI缓存(fastcgi_cache)。
请求流程如下:

用户请求进入 Nginx;
判断缓存是否存在:
命中:直接返回;
未命中:转发后端;
后端响应后写入缓存;
下次请求直接命中缓存。。
在真实业务中:性能提升 5~10 倍是非常常见的。
Nginx缓存实战
1️⃣ proxy_cache(缓存开关)
用于开启缓存能力:
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m; # 正常响应缓存 10 分钟
proxy_cache_valid 404 1m; # 404 页面缓存 1 分钟
proxy_cache_key $host$uri$is_args$args; # 定义缓存唯一标识
add_header X-Cache-Status $upstream_cache_status; # 返回头中显示命中状态
}
2️⃣ proxy_cache_path(缓存存储)
定义缓存存储路径及规则:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
关键参数说明:
keys_zone:缓存索引(存储在内存中);
max_size:缓存最大占用空间;
inactive:多长时间未访问自动删除。
3️⃣ proxy_cache_key(缓存Key)
定义缓存唯一标识:
proxy_cache_key "$scheme$request_method$host$request_uri";
4️⃣ proxy_cache_valid(缓存时间)
proxy_cache_valid 200 10m; proxy_cache_valid 404 1m;
用于控制不同状态码的缓存时间。
完整实例:
http {
# 定义缓存路径与内存区域
proxy_cache_path /data/cache levels=1:2 keys_zone=my_cache:100m max_size=10g inactive=60m;
server {
location /api/ {
proxy_pass http://backend_servers;
# 开启缓存
proxy_cache my_cache;
proxy_cache_key "$host$request_uri";
proxy_cache_valid 200 5m;
# 核心优化:防击穿锁
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
# 在返回头中告知客户端缓存命中状态
add_header X-Cache-Status $upstream_cache_status;
}
}
}
Nginx缓存的本质:在入口层拦截流量,把高并发问题提前解决。