Ubuntu 环境下提升 API 响应速度的缓存方案
一 缓存分层与适用场景
| 层级 | 适用数据 | 主要手段 | 关键配置/要点 |
|---|---|---|---|
| 浏览器与 CDN | 静态资源、公共读接口 | Cache‑Control: public, max‑age, immutable;CDN 边缘缓存 | 静态资源设置长 max‑age;API 用 ETag/短 max‑age 或 no‑cache 结合验证 |
| 反向代理 Nginx | 网关层聚合结果、可缓存的 API 响应 | proxy_cache_path / proxy_cache / proxy_cache_valid / proxy_cache_use_stale | 见下方示例;可配合 proxy_cache_lock 降低击穿 |
| 应用进程内 | 计算/查询结果、配置 | OPcache(PHP)、内存字典 | 减少重复编译与对象创建 |
| 分布式缓存 | 会话、热点数据、跨实例共享 | Redis/Memcached | 设置 TTL、合理淘汰策略(如 LRU) |
上述分层与示例做法适用于 Ubuntu 20.04/22.04/24.04 上的常见 Web/API 架构。
二 Nginx 反向代理缓存示例
http {
# 定义缓存区:路径、键区、大小、回收策略
proxy_cache_path /data/nginx/cache
levels=1:2
keys_zone=dynamic_cache:100m
max_size=10g
inactive=24h
use_temp_path=off;
server {
listen 443 ssl http2;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_protocols TLSv1.3 TLSv1.2;
location /api/ {
proxy_pass http://backend;
proxy_cache dynamic_cache;
# 仅对 200/302 缓存 10 分钟;404 缓存 1 分钟
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
# 并发回源时只让一个请求穿透,其他等待命中
proxy_cache_lock on;
# 源站异常/超时时,使用已过期缓存响应
proxy_cache_use_stale error timeout updating;
# 可选:对可缓存响应设置浏览器缓存
proxy_cache_bypass $http_pragma;
add_header X-Cache-Status $upstream_cache_status;
}
}
}
三 应用层与数据层缓存示例
const Redis = require("ioredis");
const redis = new Redis(); // 连接 Redis
async function getUser(req, res) {
const { id } = req.params;
const key = `user:${id}`;
const cached = await redis.get(key);
if (cached) return res.json({ source: "cache", data: JSON.parse(cached) });
const user = await fetchUserFromDB(id); // 业务查询
await redis.setex(key, 600, JSON.stringify(user)); // 缓存 10 分钟
res.json({ source: "db", data: user });
}
sudo apt-get install php-opcache
sudo phpenmod opcache
sudo systemctl restart apache2 # 或 php-fpm
# 结合 Redis/Memcached 在业务层读写缓存
四 落地步骤与注意事项