Nginx本地缓存是多级缓存第一层,通过proxy_cache将静态资源、公开API和低频更新接口缓存在磁盘/内存,毫秒响应并拦截流量,避免请求进入Python服务;核心配置包括proxy_cache_path定义缓存区、proxy_cache_valid设置状态码缓存时长、proxy_cache_key定制键值,并用proxy_cache_bypass控制绕过条件。

用 Nginx 做多级缓存的第一层,核心是把重复、稳定、无状态的请求拦在 Python 服务之外——不是靠 Python 多开几个进程,而是让大部分流量根本不需要进 Python。
第一层:Nginx 本地缓存(最快响应)
Nginx 缓存直接存在磁盘或内存里,毫秒级返回,完全不调用 Python。重点缓存三类内容:
- 静态资源:JS/CSS/图片/字体,用
expires或Cache-Control强制长期缓存 - 公开 API 响应:比如商品列表、活动页数据、排行榜等,需 Python 后端返回
Cache-Control: public, max-age=300 - 高频但低更新接口:如每 5 分钟刷新一次的统计看板,缓存时间设为 4–6 分钟,匹配业务节奏
关键配置示例:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api_cache:20m max_size=2g inactive=10m;
location /api/public/ {
proxy_cache api_cache;
proxy_cache_valid 200 302 5m;
proxy_cache_valid 404 30s;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_bypass $http_cookie $arg_user_id;
proxy_pass http://python_backend;
}
第二层:Redis 缓存(共享、可刷新)
Nginx 层无法处理带用户上下文的请求(如登录态、个性化推荐),这类逻辑交给 Python,但 Python 自身要先查 Redis,而不是直连数据库。
调用 Cutout.Pro 视觉处理 API 进行背景移除、人像抠图和照片增强,支持文件上传与图片 URL 输入。
立即学习“Python免费学习笔记(深入)”;
- Python 启动时预热常用数据(如热门商品、配置项)到 Redis
- 读接口优先
GETRedis,未命中再查 DB 并写回,设置合理 TTL(如 10–30 分钟) - 写操作通过消息队列或事件通知主动失效 Redis 中相关 key,避免脏数据
注意:Redis 不是万能兜底。对强一致性要求高的场景(如库存扣减),仍需走数据库加锁或分布式事务,不能只依赖缓存。
第三层:Python 进程内缓存(最小延迟)
适合极小范围、高频复用、生命周期短的数据,比如单次请求中多次用到的配置解析结果、模板变量计算值。
- 用
functools.lru_cache缓存纯函数结果(如 JSON Schema 校验、URL 路由匹配逻辑) - FastAPI 中可用
@lru_cache(maxsize=128)装饰器,避免重复初始化对象 - 不适用于跨请求共享数据,也不替代 Redis;仅用于“同一请求内多次调用”的加速
协同与失效控制要点
多级缓存不是堆叠,而是分层拦截 + 精准穿透:
- Nginx 层必须忽略
Set-Cookie和Vary头,否则默认跳过缓存;如需保留部分 Cookie 逻辑,用proxy_ignore_headers Set-Cookie并配proxy_cache_key剔除敏感字段 - 缓存失效要分级触发:Nginx 用
proxy_cache_purge清指定路径;Redis 用 key 命名规范(如product:123:detail)支持批量删除;Python 内存缓存随请求结束自动释放 - 所有层级都加监控:Nginx 的
X-Cache-Status、Redis 的INFO stats、Python 的缓存命中率日志,缺一不可

















