首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 緩存技術全景總結:10 大層級方案從代碼級到架構級

     編輯:PHP 綜合知識

代碼級緩存(應用層實現)

1. 數據緩存

將數據庫查詢結果序列化存入文件/內存,後續請求直接讀取緩存。典型案例: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, '

2. 頁面緩存

整頁 HTML 靜態化存文件,下次請求直接輸出文件內容。模板引擎常內置此功能。

3. 時間觸發緩存

檢查文件修改時間是否過期:if (time() - filemtime($file) < $expire) use_cache();

4. 內容觸發緩存

數據增刪改時主動刪除/更新對應緩存,保證實時性。

5. 靜態緩存(純靜態化)

生成 .html/.xml 文件,Web 服務器直接靜態文件響應,零 PHP 執行開銷。適合極少變動頁面(如幫助文檔、產品詳情)。

服務器/架構級緩存(需基礎設施配合)

6. 內存緩存:Memcached / Redis

高性能分布式 Key-Value 存儲,毫秒級讀寫,支撐高併發熱點數據。Redis 更豐富(數據結構、持久化、集群)。

7. PHP Opcode 緩存:OPcache / APCu / XCache

編譯後的字節碼存內存,避免重複編譯。生產環境**必開 OPcache**,典型提升 2-3 倍吞吐。

8. MySQL 查詢緩存 / Innodb Buffer Pool

MySQL 8.0 移除 Query Cache,依賴 Buffer Pool 緩存索引/數據頁。合理設置 innodb_buffer_pool_size(建議物理內存 60-80%)。

9. 反向代理 Web 緩存:Nginx fastcgi_cache / proxy_cache / Varnish / Squid

在 PHP-FPM 前緩存響應體,命中直接返回,繞過 PHP 執行。支持按 URL、Header、Cookie 區分緩存。

10. DNS 輪詢 / CDN 邊緣緩存

多節點部署,智能解析就近訪問。CDN 緩存靜態資源(圖片、CSS、JS、視頻),回源策略可控。

選型決策矩陣

場景首選方案備選/補充
熱點數據(配置、字典、Session)Redis / APCuMemcached
複雜查詢結果(報表、列表)Redis / 文件緩存Materialized View
全頁面匿名訪問Nginx fastcgi_cacheVarnish + ESI
用戶個性化頁面Redis (Key 含 user_id) + 瀏覽器緩存Edge Side Includes
靜態資源CDN + 長期緩存頭Nginx 靜態文件服務
高併發寫入緩衝Redis 隊列異步落庫Kafka + Consumer

緩存一致性核心策略

  1. Cache-Aside (旁路緩存):讀時先查緩存,無則查 DB 回寫;寫時先更新 DB,再刪緩存(非更新緩存,防併發髒讀)。
  2. Read/Write Through:緩存層封裝 DB 讀寫,應用無感知(需中間件支持)。
  3. Write Behind:寫緩存異步批量刷 DB,高性能但有數據丟失風險。
  4. 緩存穿透防護:空值緩存短期 Key、布隆過濾器攔截不存在 Key。
  5. 緩存雪崩防護:過期時間加隨機值、多級緩存、熔斷降級。

最佳實踐清單

  • ✅ 生產環境**必開 OPcache**,調整 opcache.memory_consumption、opcache.max_accelerated_files。
  • ✅ 會話存儲遷移至 Redis(session.save_handler = redis),支持多實例共享。
  • ✅ 緩存 Key 規範:prefix:module:entity:id:version,含版本號便於結構變更清理。
  • ✅ 監控指標:命中率、內存使用率、驅逐數、延遲 P99、錯誤率。
  • ✅ 定期演練:緩存全失效場景下 DB 能否承受流量(限流、降級預案)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved