Nginx缓存性能机制:如何提高10倍性能!

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

Nginx缓存

Nginx缓存性能机制:如何提高10倍性能!-mikechen

在高并发场景中,系统性能瓶颈通常不在 CPU,而在:

数据库 IO;

网络请求;

后端服务响应。

如果每个请求都直达数据库或后端服务,系统很快就会被拖垮。

这时,Nginx 的缓存机制就成了关键。

把“重复请求”直接在入口层拦截并返回,避免进入后端系统。

 

Nginx缓存原理

缓存的本质:是用快速存储代替重复计算或慢速请求。

Nginx常见的缓存场景包括静态资源缓存、反向代理缓存(proxy_cache)和FastCGI缓存(fastcgi_cache)。

请求流程如下:

Nginx缓存性能机制:如何提高10倍性能!-mikechen

用户请求进入 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缓存的本质:在入口层拦截流量,把高并发问题提前解决。

评论交流
    说说你的看法