將數據庫查詢結果序列化存入文件/內存,後續請求直接讀取緩存。典型案例:Discuz 搜索結果 ID 緩存表。
<?php
$cacheFile = 'cache/search_' . md5($keyword) . '.php';
if (file_exists($cacheFile) && time() - filemtime($cacheFile) < 3600) {
$ids = include $cacheFile;
} else {
$ids = $db->query("SELECT id FROM posts WHERE title LIKE '%$keyword%'")->fetchAll(PDO::FETCH_COLUMN);
file_put_contents($cacheFile, '
整頁 HTML 靜態化存文件,下次請求直接輸出文件內容。模板引擎常內置此功能。
檢查文件修改時間是否過期:if (time() - filemtime($file) < $expire) use_cache();
數據增刪改時主動刪除/更新對應緩存,保證實時性。
生成 .html/.xml 文件,Web 服務器直接靜態文件響應,零 PHP 執行開銷。適合極少變動頁面(如幫助文檔、產品詳情)。
高性能分布式 Key-Value 存儲,毫秒級讀寫,支撐高併發熱點數據。Redis 更豐富(數據結構、持久化、集群)。
編譯後的字節碼存內存,避免重複編譯。生產環境**必開 OPcache**,典型提升 2-3 倍吞吐。
MySQL 8.0 移除 Query Cache,依賴 Buffer Pool 緩存索引/數據頁。合理設置 innodb_buffer_pool_size(建議物理內存 60-80%)。
在 PHP-FPM 前緩存響應體,命中直接返回,繞過 PHP 執行。支持按 URL、Header、Cookie 區分緩存。
多節點部署,智能解析就近訪問。CDN 緩存靜態資源(圖片、CSS、JS、視頻),回源策略可控。
| 場景 | 首選方案 | 備選/補充 |
|---|---|---|
| 熱點數據(配置、字典、Session) | Redis / APCu | Memcached |
| 複雜查詢結果(報表、列表) | Redis / 文件緩存 | Materialized View |
| 全頁面匿名訪問 | Nginx fastcgi_cache | Varnish + ESI |
| 用戶個性化頁面 | Redis (Key 含 user_id) + 瀏覽器緩存 | Edge Side Includes |
| 靜態資源 | CDN + 長期緩存頭 | Nginx 靜態文件服務 |
| 高併發寫入緩衝 | Redis 隊列異步落庫 | Kafka + Consumer |
opcache.memory_consumption、opcache.max_accelerated_files。session.save_handler = redis),支持多實例共享。prefix:module:entity:id:version,含版本號便於結構變更清理。