快取是提升 Web 應用效能的關鍵技術。Zend Framework 的 Zend_Cache 元件採用前端/後端架構設計,支援多種儲存後端 (檔案、資料庫、Memcached、APC 等)。本文以最基礎的檔案快取為例,說明核心操作流程。
Zend_Cache 採雙層架構:
<?php
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Cache');
// 前端設定:快取壽命 60 秒,啟用自動序列化
$frontendOptions = [
'lifetime' => 60,
'automatic_serialization' => true // 注意:原碼拼寫錯誤 'automtic',此處已修正
];
// 後端設定:檔案儲存目錄
$backendOptions = [
'cache_dir' => 'cache' // 需確保目錄可寫入
];
// 建立快取物件:Core 前端 + File 後端
$cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
$cacheId = 'cache_two';
// 嘗試讀取快取
if ($result = $cache->load($cacheId)) {
echo '快取命中!<br>';
print_r($result);
} else {
echo '快取未命中,讀取原始資料...<br>';
// 模擬從檔案讀取資料
$filename = 'temp.txt';
$handle = fopen($filename, 'r');
$result = fread($handle, filesize($filename));
fclose($handle);
// 寫入快取
$cache->save($result, $cacheId);
print_r($result);
}
?>
| 方法 | 用途 |
|---|---|
load($id) | 讀取快取,命中返回資料,失敗返回 false |
save($data, $id, $tags, $specificLifetime) | 儲存資料到快取 |
remove($id) | 刪除指定快取 |
clean($mode, $tags) | 清理快取 (all/oldest/matchingTags/notMatchingTags) |
cache_dir 必須可由 Web 伺服器寫入automatic_serialization 會對非純量值序列化,資源型別 (resource) 無法序列化善用 Zend_Cache 可大幅降低資料庫負載,提升回應速度,是高流量網站的必備組件。