程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> ZendFramework-Zend Cache-緩存

ZendFramework-Zend Cache-緩存

編輯:PHP綜合
簡介
        Zend_Cache 提供了一個緩存任何數據的一般方法.         在Zend Framework中緩存由前端操作,同時通過後端適配器(File, Sqlite, Memcache...)和
        一個靈活的IDs和Tags系統(標識符和標記系統)存儲緩存紀錄.使用此方法,
        易於刪除特定類型的紀錄(例如:"刪除所有標記為tag的紀錄")         模塊(Zend_Cache_Core) 的核心是通用,靈活和可配置.對於特定的需要,為了便捷,
        這裡有一些繼承自Zend_Cache_Core的前端: Output, File, Function 和 Class
        調用 Zend_Cache::factory()取得一個前端                 Zend_Cache::factory() 實例化正確的對象並把他們捆綁到一起.                         $frontendOptions = array(
                           'lifeTime' => 7200, // 兩小時的緩存生命期
                           'automatic_serialization' => true
                        );                         $backendOptions = array(
                            'cache_dir' => './tmp/' // 放緩存文件的目錄
                        );                         // 取得一個Zend_Cache_Core 對象
                        $cache = Zend_Cache::factory('Core',
                                                     'File',
                                                     $frontendOptions,
                                                     $backendOptions);
        Caching a database query result                 現在有了一個前端,可用緩存任何類型的數據了(開了序列化'serialization').                 結果被緩存後,不再需要連接到數據庫;數據直接在緩存中取回和反序列化                         // $cache 在先前的例子中已經初始化了                         // 查看一個緩存是否存在:
                        if(!$result = $cache->load('myresult')) {                             // 緩存不命中;連接到數據庫                             $db = Zend_Db::factory( [...] );                             $result = $db->fetchAll('SELECT * FROM huge_table');                             $cache->save($result, 'myresult');                         } else {                             // cache hit! shout so that we know
                            echo "This one is from cache!\n\n";                         }                         print_r($result);
        用Zend_Cache 輸出前端緩存輸出                 通過加入條件邏輯,我們'mark up'(標記)那些希望緩存輸出的段(sections),
                在start() 和 end()方法間封裝這些section(這類似第一個例子,並且是緩存的核心策略).                 在內部,像往常一樣輸出數據,當執行到end()方法時,所有之前的輸出都被緩存.
                在下一次運行時,整個段(end()方法調用前的代碼)將被跳過執行,直接從Cache中取回數據(只要緩存紀錄是有效的).                         $frontendOptions = array(
                           'lifeTime' => 30,                  // cache lifetime of 30 seconds
                           'automatic_serialization' => false // this is the default anyway
                         s                         // 翻譯時實驗系統為Windows,請使用Windows的讀者修改cacheDir的路徑為實際的路徑
                        $backendOptions = array('cache_dir' => './tmp/');                         $cache = Zend_Cache::factory('Output',
                                                     'File',
                                                     $frontendOptions,
                                                     $backendOptions);                         // 傳遞一個唯一標識符給start()方法
                        if(!$cache->start('mypage')) {
                            // output as usual:                             echo 'Hello world! ';
                            echo 'This is cached ('.time().') ';                             $cache->end(); // the output is saved and sent to the browser
                        }                         echo 'This is never cached ('.time().').';                 注意我們兩次輸出了time()的結果;為演示目的第二次的time()調用是動態的.                 這是因為第一個數組在緩存段中輸出,因此輸出是被緩存了.
                30秒後(我們設置了lifetime為30秒)由於緩存紀錄超時而變得無效了,
                第一個數字再次更新,同時於第二個時間匹配(相同)         在使用Zend_Cache是特別要注意的Cache標識(傳遞給save()和start()的參數). 緩存原理         在Zend_Cache中有三個關鍵概念.一是用於標識緩存紀錄的唯一標識符(一個字符串).
        二是'lifeTime'指令,正如例子中所見, 它定義了緩存紀錄的生命期(超過該值,緩存紀錄被銷毀).         前端函數(例如. Zend_Cache_Core::get())在緩存不命中時返回false,
        這使用戶能處理if(){ ... } 語句中的條件,包含代碼中他們所要緩存(或者跳過)的部分,
        最後是否必須保存這些曾經生成的塊(例如: Zend_Cache_Core::save()).         Zend_Cache 工廠方法                 // We choose a backend (for example 'File' or 'Sqlite'...)
                $backendName = '[...]';                 // 選擇一個前端(例如'Core', 'Output', 'Page'...)
                $frontendName = '[...]';                 // 為選擇的前端設置一個選項數組
                $frontendOptions = array([...]);                 // 為選擇的後端設置一個選項數組
                $backendOptions = array([...]);                 // 創建實例(當然,最後兩個參數是可選的)
                $cache = Zend_Cache::factory($frontendName, $backendName, $frontendOptions, $backendOptions);
        標記紀錄                 標記是給緩存紀錄分類的一種方法.當使用save()方法保存一個緩存時,                 此後不再需要該緩存紀錄使,可以清除所有指定標記的緩存紀錄.                         $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));         緩存清理                 刪除特定id的Cache紀錄,使用remove()方法                         $cache->remove('idToRemove');                 在單個操作中刪除多個Cache紀錄,可以使用clean()方法.例如,刪除所有的緩存紀錄:                         // 清除所有緩存紀錄
                        $cache->clean(Zend_Cache::CLEANING_MODE_ALL);                         // 僅清除過期的
                        $cache->clean(Zend_Cache::CLEANING_MODE_OLD);                 如果想刪除標記為'tagA'和'tagC'的緩存項:                         $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('tagA', 'tagC'));
                可用的清除模式有:CLEANING_MODE_ALL, CLEANING_MODE_OLD, CLEANING_MODE_MATCHING_TAG 和
                CLEANING_MODE_NOT_MATCHING_TAG. Zend_Cache前端         Zend_Cache_Core                 簡介                         Zend_Cache_Core是一個特別的前端,因為他是模塊的核心.
                        它是一個一般化(generic)的緩存前端,並且由其他類擴展
                可用選項                         caching
                        cache_id_prefix
                        lifetime
                        logging
                        write_control
                        automatic_serialization
                        automatic_cleaning_factor
                        ignore_user_abort                 例子                         // 假定已經有 $cache                         $id = 'myBigLoop'; // cache id of "what we want to cache"                         if (!($data = $cache->load($id))) {
                            // cache miss                             $data = '';
                            for ($i = 0; $i < 10000; $i++) {
                                $data = $data . $i;
                            }                             $cache->save($data);                         }                         // [...] do something with $data (echo it, pass it on etc.)
        Zend_Cache_Frontend_Output                 簡介
                        Zend_Cache_Frontend_Output 是一個輸出捕捉前端.
                        它在PHP中使用輸出緩沖捕獲start() 和 end() 方法間的一切輸出                         該前端除了Zend_Cache_Core那些選項外沒有任何特定的選項                         // if it is a cache miss, output buffering is triggered
                        if (!($cache->start('mypage'))) {                             // output everything as usual
                            echo 'Hello world! ';
                            echo 'This is cached ('.time().') ';                             $cache->end(); // output buffering ends                         }                         echo 'This is never cached ('.time().').';
        Zend_Cache_Frontend_Function                 Introduction
                A可用的選項                         $cache->call('veryExpensiveFunc', $params);                         // $params is an array
                        // For example to call veryExpensiveFunc(1, 'foo', 'bar') with
                        // caching, you can use
                        // $cache->call('veryExpensiveFunc', array(1, 'foo', 'bar'))
        Zend_Cache_Frontend_Class                 Introduction
                Available options
                Examples                         class test {                             // Static method
                            public static function foobar($param1, $param2) {
                                echo "foobar_output($param1, $param2)";
                                return "foobar_return($param1, $param2)";                         $frontendOptions = array(
                            'cached_entity' => 'Test' // The name of the class                         // [...]                         // The cached call
                        $result = $cache->foobar('1', '2');
        Zend_Cache_Frontend_File                 Introduction
                Available options
                Examples
        Zend_Cache_Frontend_Page                 Introduction
                Available options (for this frontend in Zend_Cache factory)
                Examples Zend_Cache後端         Zend_Cache_Backend_File                 此後端把緩存紀錄存儲到文件中去(在一個選定的目錄中).
        Zend_Cache_Backend_Sqlite                 此後端把緩存紀錄存儲到SQLite數據庫中.
        Zend_Cache_Backend_Memcached                 本後端把緩存紀錄存儲到memcached服務器. memcached 是一個高性能的,分布式內存對象緩存系統.
                要使用此後端,需要一個memecached守護進程(daemon)和 memcache PECL 擴展.                 注意 : 使用此後端當設置"doNotTestCacheValidity=true"參數時,不支持"tags"
        Zend_Cache_Backend_Apc                 此後端通過 APC (Alternative PHP Cache) 擴展把緩存紀錄存儲於共享內存中
                (當然為使用此後端,APC是需要的).                 注意 : 使用此後端當設置"doNotTestCacheValidity=true"參數時,不支持"tags"
        Zend_Cache_Backend_Xcache                 整個後端通過 XCache 擴展(它當然需要使用這個後端) 在共享內存裡存儲了緩存記錄。                 小心:用這個後端,目前不支持 ”tags“,因為 "doNotTestCacheValidity=true" 參數
        Zend_Cache_Backend_ZendPlatform                 本後端使用 Zend Platform產品的內容緩存API. 要使用此後端必須安裝Zend Platform.                 本後端支持標記(tags),但不支持 CLEANING_MODE_NOT_MATCHING_TAG清除模式.                 當使用Zend_Cache::factory()方法時,在字 'Zend' 和 'Platform'之間使用字分隔符-- '-', '.', ' ', or '_'指定此後端:                         $cache = Zend_Cache::factory('Core', 'Zend Platform');                 此後端沒有選項.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved