快取 ======= 快取是提升 Web 應用程式效能最便宜且有效的方法。通過將靜態的資料儲存到快取並在收到請求時取回快取,節省了產生這些資料所需的時間。 在 Yii 中使用快取主要包括配置並存取一個應用程式元件。 下面的應用程式配置設定了兩個 memcache 快取伺服器的快取元件。 ~~~ [php] array( ...... 'components'=>array( ...... 'cache'=>array( 'class'=>'system.caching.CMemCache', 'servers'=>array( array('host'=>'server1', 'port'=>11211, 'weight'=>60), array('host'=>'server2', 'port'=>11211, 'weight'=>40), ), ), ), ); ~~~ 當應用程式運行時,快取元件可通過 `Yii::app()->cache` 存取。 Yii 提供了不同的快取元件,可以將快取資料儲存到不同的媒介中。例如, [CMemCache] 元件封裝了 PHP 的 memcache 擴充並使用記憶體作為快取儲存媒介。 [CApcCache] 元件封裝了 PHP APC 擴充; 而 [CDbCache] 元件會將快取的資料存入資料庫。下面是可用的快取元件的列表: - [CMemCache]: 使用 PHP [memcache 擴充](http://www.php.net/manual/en/book.memcache.php). - [CApcCache]: 使用 PHP [APC 擴充](http://www.php.net/manual/en/book.apc.php). - [CXCache]: 使用 PHP [XCache 擴充](http://xcache.lighttpd.net/)。注意,這個是從 1.0.1 版本開始支援的。 - [CEAcceleratorCache]: 使用 PHP [EAccelerator 擴充](http://eaccelerator.net/). - [CDbCache]: 使用一個資料表儲存快取資料。預設情況下,它將建立並使用在 runtime 目錄下的一個 SQLite3 資料庫。 你也可以通過設置其 [connectionID|CDbCache::connectionID] 屬性指定一個給它使用的資料庫。 - [CZendDataCache]: 使用 Zend Data Cache 作為後台快取媒介。注意,這個是從 1.0.4 版本開始支援的。 - [CFileCache]: 使用文件儲存快取資料。這個特別適合用於儲存大塊資料(例如頁面)。注意,這個是從 1.0.6 版本開始支援的。 - [CDummyCache]: 目前 dummy 快取並不實現快取功能。此元件的目的是用於簡化那些需要檢查快取可用性的程式碼。 例如,在開發階段或者伺服器尚未支援實際的快取功能,我們可以使用此快取元件。當啟用了實際的快取支援後,我們可以切換到使用相應的快取元件。 在這兩種情況中,我們可以使用同樣的程式碼 `Yii::app()->cache->get($key)` 取得資料而不需要擔心 `Yii::app()->cache` 可能會是 `null`。此元件從 1.0.5 版開始支援。 > Tip|提示: 由於所有的這些快取元件均繼承自同樣的基礎類別 [CCache],因此無需改變使用快取的那些程式碼就可以切換到使用另一種快取方式。 快取可以用於不同的級別。最低級別中,我們使用快取儲存單個資料片段,例如變數,我們將此稱為 *資料快取(data caching)*。下一個級別中,我們在快取中儲存一個由視圖腳本的一部分產生的頁面片段。 而在最高級別中,我們將整個頁面儲存在快取中並在需要時取回。 在接下來的幾個小節中,我們會詳細講解如何在這些級別中使用快取。 > Note|注意: 按照定義,快取是一個不穩定的儲存媒介。即使沒有超時,它也並不確保快取資料一定存在。 因此,不要將快取作為持久儲存裝置使用。(例如,不要使用快取儲存 Session 資料)。