Zend Framework Cache常用代碼執行個體

來源:互聯網
上載者:User

Zend Framework中有3種常用的前端類,分別是

Zend_Cache_Core

Zend_Cache_Frontend_Output

Zend_Cache_Frontend_Page

與之對應的ASP.NET中的概念分別是資料緩衝,片段快取,頁面緩衝。

其中Zend_Cache_Frontend_Output和Zend_Cache_Frontend_Page都繼承了Zend_Cache_Core。

在建立緩衝的時候,對應的代碼如下,這些代碼一般寫在資源方法中,Bootstrap.php檔案內。

if (false == Zend_Registry::isRegistered('coreCache')) {    $frontendOptions = array(            'lifetime' => 10,            'automatic_serialization' => true    );                    $backendOptions = array(            'cache_dir' => APPLICATION_PATH . '/tmp'    );                    $core_cache = Zend_Cache::factory('Core', 'File', $frontendOptions,            $backendOptions);    Zend_Registry::set('coreCache', $core_cache);}


if (false == Zend_Registry::isRegistered('outputCache')) {    $frontendOptions = array(            'lifetime' => 10    );                  $backendOptions = array(            'cache_dir' => APPLICATION_PATH . '/tmp'    );                  $output_cache = Zend_Cache::factory('Output', 'File',            $frontendOptions, $backendOptions);    Zend_Registry::set('outputCache', $output_cache);}


if (false == Zend_Registry::isRegistered('pageCache')) {    $frontendOptions = array(            'lifetime' => 4    )    ;                $backendOptions = array(            'cache_dir' => APPLICATION_PATH . '/tmp'    );                $page_cache = Zend_Cache::factory('Page', 'File', $frontendOptions,            $backendOptions);    Zend_Registry::set('pageCache', $page_cache);}

Zend_Cache_Core主要用來快取資料。比如數組,字串之類的。類似ASP.NET中的資料緩衝。下面的代碼示範如何用緩衝。

try {            $core_cache = Zend_Registry::get('coreCache');            $z_now = Zend_Date::now();            if (!$result = $core_cache->load("now")) // 緩衝未命中            {                echo "緩衝未命中<br>";                $core_cache->save($z_now, "now");//加入緩衝                echo $z_now;            } else {                echo "快取命中<br>";                echo $result;            }        } catch (Exception $e) {echo $e->getMessage();        }

初次開啟頁面,由於沒有緩衝,因此緩衝未命中,把目前時間加入緩衝中。然後重新整理頁面,緩衝已經有了,直接讀緩衝,因此會發現時間不變。

當10秒後緩衝失效,緩衝又未命中了。

Zend_Cache_Frontend_Output繼承了Zend_Cache_Core,因此上述的快取資料的方法,它也可以使用。

同時它是一個輸出捕捉前端.它在PHP中使用輸出緩衝捕獲start() 和 end() 方法間的一切輸出. 類似於ASP.NET中的片段快取。看如下範例程式碼:

try {            $output_cache = Zend_Registry::get('outputCache');            if (!($output_cache->start('myoutput'))) {                echo Zend_Date::now();                $output_cache->end(); // output buffering ends                echo "緩衝未命中";            }           echo "<br>目前時間為:";           echo Zend_Date::now();        } catch (Exception $e) {echo $e->getMessage();        }

$output_cache->start('myoutput') 這句話,如果已經有了myoutput這個緩衝的話,也就是說start方法返回的是true的話,則if裡面的語句運行了。直接把myoutput這個緩衝的內容輸出一遍。否則,重新記錄一遍myoutput緩衝,緩衝的內容就是送start到end之間的內容。發送緩衝記錄後,後續的代碼繼續運行下去。

Zend_Cache_Frontend_Page同樣繼承了Zend_Cache_Core,它和Zend_Cache_Frontend_Output類似,但不同的是,它不是緩衝單一的資料片斷,而是緩衝整個頁面。因此它只有start方法,沒有end方法,或者說當程式運行完,會自動的運行end方法。使用更簡單,只需要代碼如下:

try {    $page_cache = Zend_Registry::get('pageCache');    $page_cache->start();    echo Zend_Date::now();} catch (Exception $e) {    echo $e->getMessage();}

首次的時候,會把start方法後面的輸出都會緩衝起來。下次啟動並執行時候,快取命中的話,就直接發送緩衝,而不執行下面的語句了。如果後續的語句是資料庫中的資料,則會節省了資料庫讀取操作。提升了效率。

本文出自 “一隻部落格” 部落格,請務必保留此出處http://cnn237111.blog.51cto.com/2359144/1300904

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.