快取核心邏輯:將昂貴運算結果(資料庫查詢、複雜運算、模板渲染)儲存於高速介質,後續請求直接讀取,繞過重複計算。 快取層級由快到慢:CPU 快取 → 記憶體 → 本地磁碟 → 網路儲存 → 資料庫。
捕獲最終 HTML 輸出,下次請求直接送出,繞過 PHP 執行與模板渲染。
// 輸出緩衝區快取(內建)
ob_start();
// ... 複雜業務邏輯與模板渲染 ...
$html = ob_get_clean();
file_put_contents('cache/page.html', $html);
// 後續請求
if (file_exists('cache/page.html') && time() - filemtime('cache/page.html') < 300) {
readfile('cache/page.html');
exit;
}
適用場景:內容較靜態、個性化程度低的頁面(首頁、列表頁、文章頁)。
優點:效能極致、實作簡單。
缺點:難以處理動態區塊(用戶資訊、購物車)、快取失效策略複雜。
快取結構化資料(陣列、物件),由程式碼控制讀寫時機。
// ADOdb 資料快取範例
include('adodb/adodb.inc.php');
$ADODB_CACHE_DIR = 'tmp';
$db = NewADOConnection('mysql');
$db->Connect('localhost', 'root', 'pass', 'db');
$sql = "SELECT * FROM products WHERE category = ?";
$rs = $db->CacheExecute(300, $sql, [$catId]); // 300 秒快取
// Smarty 模板快取
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
$smarty->cache_lifetime = 300;
if (!$smarty->is_cached('index.tpl')) {
$data = getProductsFromDB(); // 昂貴操作
$smarty->assign('products', $data);
}
$smarty->display('index.tpl');
適用場景:高度動態、需精細控制快取粒度的業務邏輯。
優點:靈活控制快取內容與生命週期、支援局部更新。
缺點:程式碼侵入性強、需設計快取鍵策略。
| 介質 | 速度 | 容量 | 持久性 | 適用場景 |
|---|---|---|---|---|
| 記憶體 | 極快 | 小 | 掉電失效 | Session、熱點資料、計數器 |
| Redis | 極快 | 中 | 可持久化 | 分散式快取、Session 共享、排行榜 |
| Memcached | 極快 | 中 | 無持久化 | 簡單 Key-Value、多伺服器叢集 |
| 本地檔案 | 中 | 大 | 持久 | 頁面快取、小型專案、開發環境 |
| 資料庫 | 慢 | 大 | 持久 | 結構化查詢、需事務支援場景 |
應用程式負責讀寫快取與資料庫,最常見模式:
function getUser($id) {
$key = "user:$id";
if ($data = $redis->get($key)) return json_decode($data, true);
$data = $db->query("SELECT * FROM users WHERE id = ?", [$id]);
$redis->setex($key, 3600, json_encode($data));
return $data;
}
user:123、tag:user:123┌─────────────────────────────────────┐
│ 瀏覽器快取 (HTTP Header) │ ← 靜態資源、ETag/Last-Modified
├─────────────────────────────────────┤
│ CDN 邊緣節點快取 │ ← 全站靜態資源、頁面片段
├─────────────────────────────────────┤
│ Nginx fastcgi/proxy 快取 │ ← 匿名用戶頁面、API 響應
├─────────────────────────────────────┤
│ PHP 進程內快取 (APCu/陣列) │ ← 配置資料、字典表、熱點計算結果
├─────────────────────────────────────┤
│ 分散式快取叢集 │ ← 用戶 Session、商品詳情、動態列表
├─────────────────────────────────────┤
│ 資料庫 │ ← 持久化存儲、複雜查詢、事務操作
└─────────────────────────────────────┘
快取非銀彈,但設計得當能帶來數量級效能提升。關鍵在於識別熱點、選對介質、定好策略、備好降級。