结论与原理
可以,合理启用缓存能显著缩短网站的TTFB(首字节时间)与页面渲染时间。在CentOS上,缓存的作用体现在:将频繁访问的数据放入内存(如Page Cache、dcache、inode cache),减少对磁盘I/O与后端服务的访问;对静态资源(CSS/JS/图片)与可缓存的动态内容进行存储,降低服务器负载并提升并发能力;配合CDN与浏览器缓存,用户可从更近或更靠近客户端的节点获取内容,进一步减少网络时延。
常见缓存层级与适用场景
| 缓存层级 |
主要作用 |
典型配置/工具 |
适用场景 |
| 操作系统层 |
利用Page Cache/dcache加速文件读取,减少磁盘I/O |
内核自动管理,观察free -m |
静态资源、日志、模板等读多写少场景 |
| Web服务器层 |
反向代理/页面/对象缓存 |
Nginx proxy_cache/fastcgi_cache;Varnish |
可缓存的页面与接口、静态资源边缘加速 |
| 应用层 |
缓存数据库查询结果、会话等 |
Redis、Memcached |
数据库瓶颈、会话存储、热点数据 |
| 内容分发层 |
全球节点缓存与就近分发 |
CDN(如 Cloudflare、Akamai) |
面向广域用户的静态资源与可缓存内容 |
| 名称解析层 |
降低DNS查询时延 |
nscd |
频繁域名解析、短TTL记录场景 |
| 以上层级可叠加使用,命中率越高,提速越明显。 |
|
|
|
快速落地示例
- Nginx反向代理缓存示例
- 在**/etc/nginx/nginx.conf的http**段定义缓存区:
- proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
- 在server/location中启用:
- proxy_pass http://backend;
- proxy_cache my_cache;
- proxy_cache_valid 200 302 10m;
- proxy_cache_valid 404 1m;
- Varnish示例(监听6081,后端127.0.0.1:8080)
- backend default { .host = “127.0.0.1”; .port = “8080”; }
- sub vcl_recv { if (req.http.Cookie ~ “PHPSESSID” || req.http.Authorization) { return (pass); } return (hash); }
- sub vcl_backend_response { if (bereq.http.Cookie ~ “PHPSESSID”) { set beresp.uncacheable = true; return (deliver); } }
- sub vcl_deliver { set resp.http.X-Cache = obj.hits > 0 ? “HIT” : “MISS”; }
- 应用层缓存
- 安装并启用Redis/Memcached,在应用内将热点数据、查询结果、会话存入内存,减轻数据库压力。
- CDN
- 接入Cloudflare/Akamai等,配置静态资源与可缓存接口的Cache-Control/Expires,并合理设置Purge/刷新策略。
注意事项与监控
- 缓存失效与一致性:为不同资源设置合适的Cache-Control/Expires,对个性化或隐私内容使用no-cache/no-store,变更发布后及时Purge相关缓存,避免脏数据。
- 典型缓存问题:防范缓存穿透/雪崩/击穿(如布隆过滤器、互斥锁、随机过期时间、热点永不过期策略)。
- 监控与度量:持续观察命中率、TTFB、带宽/请求量与后端QPS/延迟,结合响应头如X-Cache定位瓶颈与验证效果。