「用硬盤換速度,用內存換速度,用帶寬換速度」——緩存本質是以空間換時間,將高成本計算(DB 查詢、複雜渲染、外部 API 調用)的結果保存起來,後續請求直接讀取結果,劇烈降低響應延遲與資源消耗。
| 層級 | 名稱 | 核心原理 | 典型場景/工具 |
|---|---|---|---|
| 1 | 數據緩存 | DB 查詢結果序列化存文件/表,下次直接讀 | Discuz 搜索結果 ID 緩存表、多表關聯字段冗余存陣列 |
| 2 | 頁面緩存 | 整頁 HTML 靜態化到文件,命中直接輸出 | Smarty/Twig 模板引擎內建、PHP 輸出緩存類 |
| 3 | 時間觸發緩存 | 文件 mtime < now - TTL 視為過期,需重建 | 首頁、列表頁定時更新,配合 Cron 任務預熱 |
| 4 | 內容觸發緩存 | 數據增/刪/改時主動清除/重建相關緩存 | 發布文章、修改商品價格時刷新受影響頁面 |
| 5 | 靜態化/偽靜態 | 生成純 .html/.xml 文件,Nginx 直接吞吐 | 文章詳情、商品詳情、幫助中心等低頻變更頁面 |
| 6 | 內存緩存 | Key-Value 存內存,微秒級讀寫,支援集群 | Memcached、Redis(功能更豐富) |
| 7 | PHP Opcode 緩存 | 編譯後字節碼駐留內存,省去重複編譯 | OPcache(PHP 5.5+ 內建)、APCu、XCache |
| 8 | MySQL 查詢緩存 | SQL 文本+結果集缓存(8.0 已移除) | 歷史版本 MySQL 5.7 開啟 query_cache_type |
| 9 | 反向代理/Web 緩存 | Nginx/Squid/Varnish 緩存上游響應 | Nginx proxy_cache、fastcgi_cache、CDN 邊緣節點 |
| 10 | DNS 輪詢/GSLB | 域名解析到最近/最優邊緣節點 | BIND、DNSPod、Cloudflare、商業 CDN(ChinaCache 等) |
緩存不是銀彈,而是系統演進中的必經之路。從代碼級的數據緩存,到基礎設施級的 CDN/DNS,每一層都在特定維度解決「快」的問題。實際架構中,通常組合使用 3-5 層,形成「洋蔥模型」:越外層吞吐越大、延遲越低;越內層數據越精準、邏輯越複雜。根據業務增長節奏,逐層疊加,才是務實之道。