Yii架構官方指南增補系列29——緩衝:資料緩衝

來源:互聯網
上載者:User



資料緩衝即儲存一些 PHP 變數到緩衝中,以後再從緩衝中取出來。出於此目的,緩衝組件的基類 CCache 提供了兩個最常用的方法: set() 和 get()。

要在緩衝中儲存一個變數 $value ,我們選擇一個唯一 ID 並調用 set() 儲存它:


Yii::app()->cache->set($id, $value);

緩衝的資料將一直留在緩衝中,除非它由於某些緩衝策略(例如緩衝空間已滿,舊的資料被刪除)而被清除。 要改變這種行為,我們可以在調用 set() 的同時提供一個到期參數,這樣在設定的時間段之後,快取資料將被清除:


// 值$value 在緩衝中最多保留30秒Yii::app()->cache->set($id, $value, 30);

稍後當我們需要訪問此變數時(在同一個或不同的 Web 請求中),就可以通過 ID 調用 get() 從緩衝中將其取回。 如果返回的是 false,表示此值在緩衝中不可用,我們應該重建它。


$value=Yii::app()->cache->get($id);if($value===false){    // 因為在緩衝中沒找到 $value ,重建它 ,    // 並將它存入緩衝以備以後使用:    // Yii::app()->cache->set($id,$value);}

為要存入緩衝的變數選擇 ID 時,要確保此 ID 對應用中所有其他存入緩衝的變數是唯一的。 而在不同的應用之間,這個 ID 不需要是唯一的。緩衝組件具有足夠的智慧區分不同應用中的 ID。

一些緩衝儲存空間,例如 MemCache, APC, 支援以批量模式擷取多個緩衝值。這可以減少擷取快取資料時帶來的開銷。 從版本 1.0.8 起,Yii 提供了一個新的名為 mget() 的方法。它可以利用此功能。如果底層緩衝儲存空間不支援此功能,mget() 依然可以類比實現它。

要從緩衝中清除一個緩衝值,調用 delete(); 要清楚緩衝中的所有資料,調用 flush()。 當調用 flush() 時一定要小心,因為它會同時清除其他應用中的緩衝。

提示: 由於 CCache 實現了 ArrayAccess,緩衝組件也可以像一個數組一樣使用。下面是幾個例子:


$cache=Yii::app()->cache;$cache['var1']=$value1;  // 相當於: $cache->set('var1',$value1);$value2=$cache['var2'];  // 相當於: $value2=$cache->get('var2');

緩衝依賴

除了到期設定,快取資料也可能會因為依賴條件發生變化而失效。例如,如果我們緩衝了某些檔案的內容,而這些檔案發生了改變,我們就應該讓緩衝的資料失效, 並從檔案中讀取最新內容而不是從緩衝中讀取。

我們將一個依賴關係表現為一個 CCacheDependency 或其子類的執行個體。 當調用 set() 時,我們連同要緩衝的資料將其一同傳入。


// 此值將在30秒後失效// 也可能因依賴的檔案發生了變化而更快失效Yii::app()->cache->set($id, $value, 30, new CFileCacheDependency('FileName'));

現在如果我們通過調用get() 從緩衝中擷取 $value ,依賴關係將被檢查,如果發生改變,我們將會得到一個 false 值,表示資料需要被重建。

如下是可用的緩衝依賴的簡要說明:

  • CFileCacheDependency: 如果檔案的最後修改時間發生改變,則依賴改變。

  • CDirectoryCacheDependency: 如果目錄和其子目錄中的檔案發生改變,則依賴改變。

  • CDbCacheDependency: 如果指定 SQL 陳述式的查詢結果發生改變,則依賴改變。

  • CGlobalStateCacheDependency: 如果指定的全域狀態發生改變,則依賴改變。全域狀態是應用中的一個跨請求,跨會話的變數。它是通過 CApplication::setGlobalState() 定義的。

  • CChainedCacheDependency: 如果鏈中的任何依賴發生改變,則此依賴改變。

  • CExpressionDependency: 如果指定的 PHP 運算式的結果發生改變,則依賴改變。此類從版本 1.0.4 起可用。

以上就是Yii架構官方指南增補系列29——緩衝:資料緩衝的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.