Zend_Cache 採用前端/後端分離架構,支援多種儲存後端。本文展示以 INI 配置初始化快取物件、存入註冊表、變數快取讀寫、全頁快取等實戰模式。
[cache] cache.needcache = 1 cache.frontend.name = Core cache.frontend.lifetime = 7200 cache.frontend.automatic_serialization = 1 cache.backend.name = File
<?php
require 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Cache');
Zend_Loader::loadClass('Zend_Config');
Zend_Loader::loadClass('Zend_Registry');
$config = new Zend_Config_Ini('configsecr/config.ini');
define('CACHE_DIR', FDROOT . '/tmp/');
$frontendOptions = $config->cache->frontend->toArray();
$backendOptions = $config->cache->backend->toArray();
$frontendName = $frontendOptions['name']; unset($frontendOptions['name']);
$backendName = $backendOptions['name']; unset($backendOptions['name']);
if (empty($backendOptions['cache_dir'])) {
$backendOptions['cache_dir'] = CACHE_DIR;
}
$_cache = Zend_Cache::factory($frontendName, $backendName, $frontendOptions, $backendOptions);
Zend_Registry::set('cache', $_cache);
// 1. 嘗試從快取讀取
$viewRenderer = $_cache->load('viewRenderer');
// 2. 快取未命中 → 重新建構
if (!$viewRenderer instanceof Something) {
$viewRenderer = new Something();
// ... 其他耗時運算 ...
// 3. 存入快取
$_cache->save($viewRenderer, 'viewRenderer');
}
Zend_Cache_Frontend_Page 直接快取輸出內容Zend_Cache_Backend_Db 將快取存入資料表Zend_Cache_Backend_Memcached / Apc 高效能場景| 選項 | 說明 |
|---|---|
| frontend.lifetime | 快取壽命(秒),0 為永久 |
| automatic_serialization | 自動序列化複雜資料型別 |
| backend.cache_dir | File 後端儲存目錄 |
善用 Zend_Cache 可大幅降低資料庫查詢與複雜運算負載,是高效能 ZF 應用不可或缺的組件。