Zend Framework 1.x 的 Zend_Cache 元件提供統一的快取抽象層,支援多種前端(資料處理)與後端(儲存媒介)組合。本文以檔案後端為例,示範核心操作流程與關鍵配置。
Core、Output、Function、Class、File、Page)。File、Sqlite、Memcached、Apc、Redis 等)。Zend_Cache::factory($frontend, $backend, $frontendOptions, $backendOptions) 建立快取物件。<?php
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Cache');
// 前端配置:Core 型別,60 秒生命週期,自動序列化
$frontendOptions = [
'lifetime' => 60,
'automatic_serialization' => true
];
// 後端配置:File 型別,指定快取目錄
$backendOptions = [
'cache_dir' => 'cache/'
];
// 建立快取實例
$cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
$cacheId = 'cache_two';
// 嘗試讀取快取
if (($result = $cache->load($cacheId)) !== false) {
echo "快取命中!
";
print_r($result);
} else {
echo "快取未命中,讀取原始資料...
";
$filename = 'temp.txt';
$content = file_get_contents($filename); // 簡化讀取
// 寫入快取
$cache->save($content, $cacheId);
print_r($content);
}
?>
| 方法 | 用途 | 回傳值 |
|---|---|---|
load($id, $doNotTestCacheValidity = false) | 讀取快取 | 快取資料 / false (未命中或過期) |
save($data, $id, $tags = [], $specificLifetime = false) | 寫入快取 | true/false |
remove($id) | 刪除指定快取 | true/false |
clean($mode = 'all', $tags = []) | 清理快取(all/old/matchingTags/notMatchingTags) | true/false |
getIds($mode = 'all', $tags = []) | 取得快取 ID 列表 | 陣列 |
getFillingPercentage() | 取得後端儲存使用率(檔案後端為檔案數) | 浮點數 0-100 |
$cache->save($data, 'item_123', ['category_5', 'user_42']);
// 稍後一次清除整個分類
$cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, ['category_5']);
'lifetime' => 3600 + rand(0, 300)specificLifetime 參數單獨控制特定項目。hashed_directory_level:啟用多層子目錄(預設 0),大量快取時設為 1-2 減少單目錄檔案數。cache_file_umask、cache_file_perm:設定檔案權限。SETNX、Memcached add)。cache_dir 有讀寫權限,且目錄存在。Zend_Cache 以靈活的前後端分離設計,讓開發者專注業務邏輯而非儲存細節。掌握其核心 API 與配置技巧,能為應用帶來顯著效能提升。現代專案建議遷移至 laminas/laminas-cache (ZF3+) 或 PSR-16 相容庫(如 symfony/cache)。