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

PHP 簡易檔案快取類實作與設計思路

     編輯:PHP 相關知識

快取目的:將數據置於訪問更快的位置。記憶體最快但容量有限,檔案快取為折中方案。本文實作一個以檔案為儲存介質、支援過期時間與鎖機制的快取類。

核心屬性

private $cache_dir;    // 快取目錄
private $expireTime = 180; // 過期秒數

關鍵方法

建構子:初始化快取目錄

public function __construct($cache_dirname) {
    if (!@is_dir($cache_dirname)) {
        if (!@mkdir($cache_dirname, 0777)) {
            $this->warn('快取目錄不存在且無法建立,請手動建立。');
            return false;
        }
    }
    $this->cache_dir = $cache_dirname;
}

寫入快取:cache_page()

  • fopen 開啟檔案,flock(LOCK_EX) 獨佔鎖。
  • fwrite 寫入資料(可先 serialize() 序列化陣列/物件)。
  • flock(LOCK_UN) 釋放鎖,fclose 關閉。

讀取快取:display_cache()

  • 檢查檔案存在,fopen('r')、fread 全讀、fclose。
  • 若為序列化資料,讀取後 unserialize() 還原。

統一介面:readData()

public function readData($cacheFile = 'default_cache.txt') {
    $cacheFile = $this->cache_dir . '/' . $cacheFile;
    if (file_exists($cacheFile) && filemtime($cacheFile) > (time() - $this->expireTime)) {
        $data = $this->display_cache($cacheFile);
    } else {
        $data = "從資料庫獲取數據..."; // 實際從 DB 查詢
        $this->cache_page($cacheFile, $data);
    }
    return $data;
}

邏輯:檔案存在且未過期 → 讀取快取;否則 → 獲取原始數據 → 寫入快取 → 返回數據。

進階應用建議

  • 配合 PHP 5 類別繼承:快取類繼承資料存取類,直接複用 DB 查詢邏輯。
  • 快取鍵值亦可快取:CMS 系統常將需更新的快取鍵存於快取中,實現全站快取失效控制。
  • 大數據場景考慮分塊快取、共享記憶體(APCu/OPcache)或 Redis/Memcached。

本類針對 PHP 5+,利用建構子/解構子、私有屬性、異常處理等 OOP 特性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved