2011-06-07 30 views
3

假設您有這種情況:一個簡單的博客主頁,加載靜態內容以及動態內容。 靜態內容由很少變化的圖片組成。我還擁有數據庫驅動的動態內容。動態內容包含您的所有博客文章(文本和圖片)以及相關用戶的評論。動態內容會每隔一小時定期更新一次到每一天。Zend如何使用緩存組件

你將如何去緩存?特別是假設用戶正在發表評論或管理員正在添加/編輯帖子給你想要手動觸發緩存清除,讓這個博客的更新版本主頁 - 頁?

感謝您的耐心配合。

盧卡

再次感謝

回答

4

因此,@mingos顯示緩存的基本用法。他談到了通用緩存,這很好。然而,ZF幾乎沒有什麼不同的緩存機制可以用於不同的事情。您不需要限制一種類型的緩存。你可以使用它們的混合物。例如,爲了緩存您的靜態內容Zend_Cache_Frontend_Page將是值得考慮的,因爲它會生成靜態頁面的完整html文件。如果你有很多配置文件,例如long routes.ini或其他,你可以使用Zend_Cache_Frontend_File來緩存它們。有了這個,你可以節省解析每個請求的ini文件的時間。您的意見中的重要部分可以使用Zend_Cache_Frontend_Output等緩存。

要緩存什麼和何時更新緩存是一個棘手的問題。這完全取決於您的內容改變的速度和頻率。例如,如果每秒鐘有100條新評論,則每秒清除評論緩存100次是沒有意義的(即對於每條新評論)。最好是將每個帖子的評論與其他帖子的評論分開緩存。然後,您將清理/刷新僅與此帖子關聯的緩存。

0

一個簡單的緩存是一個超時定義的一段時間後。這使得緩存層簡單易用。 Zend Manual has more information on caching basics

但是實時信息和緩存信息是兩個世界。如果你需要實時的話,不要緩存。

如果你讓緩存層太複雜,你可以銷燬你的整個應用程序。

7

首先,一個鏈接:http://framework.zend.com/manual/1.11/en/zend.cache.html

基本上,你需要做的是建立一個緩衝機制,然後手動調用它,當你想從緩存中檢索的東西。

在引導,我可能有這樣的代碼:

public function _initCache() { 
    $cache = Zend_Cache::factory(
     'Core', 
     'File', 
     array(
      'lifetime' => 3600 * 24, //cache is cleaned once a day 
      'automatic_serialization' => true 
     ), 
     array('cache_dir' => APPLICATION_PATH.'/cache') 
    ); 
    Zend_Db_Table_Abstract::setDefaultMetadataCache($cache); //cache database table schemata metadata for faster SQL queries 
    Zend_Registry::set('Cache', $cache); 
} 

然後,您可以使用load()和save()函數來處理緩存。我的控制器的一個例子:

$cache = Zend_Registry::get('Cache'); 
if (!$this->menu = $cache->load('main_menu')) { 
    $model = new Model_Menu(); 
    $this->menu = $model->get(); 
    $cache->save($this->menu,'main_menu'); 
} 

在這裏,我檢查鍵是否「main_menu」被緩存。如果高速緩存未命中得分,則會生成主菜單並進行高速緩存。

如果我編輯主菜單,我也想重新生成緩存。我簡單地稱之爲:

Zend_Registry::get('Cache')->remove('main_menu'); 

這很簡單,只需閱讀文檔。寫得很好。

5

Zend的緩存提供了一個非常簡單的方法來存儲在緩存中的數據,並提高速度。 Zend使用前端和後端進行緩存。前端對訪問或操作緩存很有用。後端存儲數據有用的文件,內存緩存時,SQLite等

首先初始化主音並通過引導文件中創建的功能引導文件的支持。

protected function _initCache(){ 

    $frontend= array(
     'lifetime' => 7200, 
     'automatic_serialization' => true 
    ); 

    $backend= array(
     'cache_dir' => '../application/tmp/', 
    ); 

    $cache = Zend_Cache::factory('core', 
      'File', 
      $frontend, 
      $backend 
    ); 
    Zend_Registry::set('cache',$cache); 
} 

然後使用zend緩存工廠來定義緩存對象。參數核心定義了zend緩存通用類型的核心方法File參數是定義緩存的存儲方式,在那裏存儲緩存的記錄然後第二個和第四個是前端和後端。

現在使用Zend註冊表中註冊該緩存陣列,這樣就可以使用在任何控制器,型號等

在下面定義的任何控制器或任何模型代碼要使用的數據緩存。

$result1 =」」; 
    $cache = Zend_Registry::get('cache'); 

if(!$result1 = $cache->load('mydata')) { 
     echo 'caching the data…..'; 
    $data=array(1,2,3); 
    $cache->save($data, 'mydata'); 
} else { 
    echo 'retrieving cache data…….'; 
    Zend_Debug::dump($result1); 
} 

首先在上面的代碼中我們得到了緩存數組。現在,如果未設置結果1,則緩存完成意味着文件在您在後端數組中定義的路徑中生成。

對於下一次頁面加載,將從緩存數據存儲所在的文件中檢索數據。

您可以檢查該文件按照定義的路徑。

在該文件中的數據是JSON格式。