Files
yii/docs/guide/ja/caching.data.txt
2009-04-05 21:36:33 +00:00

115 lines
5.6 KiB
Plaintext

データキャッシュ
============
データキャッシュは、PHP 変数をキャッシュし、
後でそのキャッシュから読み込めるようにします。
この目的のために、キャッシュコンポーネントのベースクラス [CCache] は、
多くの場合に利用される [set()|CCache::set] と [get()|CCache::get] の
2 つのメソッドを提供します。
キャッシュに変数 `$value` を保存するには、ユニーク ID を選び、
[set()|CCache::set] を呼びます:
~~~
[php]
Yii::app()->cache->set($id, $value);
~~~
キャッシュされたデータは、キャッシングポリシー(たとえば、
キャッシュ容量いっぱいになれば、一番古いデータが削除されます)のために、
キャッシュが消されない限りずっと残ります。
この挙動を変えるために、[set()|CCache::set] を呼ぶときに、
有効期限パラメータを指定し、一定の期間の後、キャッシュが削除されるように
する事もできます。
~~~
[php]
// 最大 30 秒間、キャッシュに値が保持される
Yii::app()->cache->set($id, $value, 30);
~~~
その後、この変数(同じ、あるいは別のウェブリクエスト中に)にアクセスする必要がある場合、
その ID を指定して [get()|CCache::get] を呼べば、キャッシュから読み込めます。
もし、返り値が false なら、値がキャッシュされていないため、
キャッシュを再生成する必要があります。
~~~
[php]
$value=Yii::app()->cache->get($id);
if($value===false)
{
// キャッシュが見つからなかったため、
// 後で利用できるように、$value のキャッシュを再生成し保存します:
// Yii::app()->cache->set($id,$value);
}
~~~
変数をキャッシュするために ID を選ぶとき、
ID がアプリケーション中でキャッシュされるかもしれない、
他の全ての変数内でユニークである事を確かめてください。
キャッシュコンポーネントでは、他のアプリケーションで同じ ID が使われていたとしても
それらを区別出来るため、ID がアプリケーションを横切ってユニークである必要はありません。
キャッシュから、キャッシュされた値を削除するには、[delete()|CCache::delete]
を呼びます。また、全てのキャッシュを削除するには、[flush()|CCache::flush]
を呼びます。[flush()|CCache::flush] は、他のアプリケーションのデータを含む、
全てのキャッシュデータを削除するため、このメソッドを呼ぶ際は、
細心の注意を払ってください。
> Tip|ヒント: [CCache] は `ArrayAccess` により実装されているため、
> キャッシュコンポーネントは配列のように扱えます。下記に例を示します:
> ~~~
> [php]
> $cache=Yii::app()->cache;
> $cache['var1']=$value1; // $cache->set('var1',$value1); と同等
> $value2=$cache['var2']; // $value2=$cache->get('var2'); と同等
> ~~~
キャッシュ依存関係
----------------
有効期限設定に加えて、キャッシュデータも依存関係のあるデータの変更により、
無効にされるかもしれません。
たとえば、あるファイルの内容がキャッシュされており、ファイルが変更された場合、
キャッシュされたコピーを無効にし、キャッシュの代わりにファイルから
最新のデータを読み込む必要があります。
[CCacheDependency] か、その子クラスのインスタンスとして依存関係を表します。
[set()|CCache::set] を呼ぶ際に、キャッシュされるデータと共に、
依存関係のインスタンスを指定します。
~~~
[php]
// 値は 30 秒間有効です
// さらに、依存関係にあるファイルが変更された場合、有効期限内でも無効になります
Yii::app()->cache->set($id, $value, 30, new CFileCacheDependency('FileName'));
~~~
今、[get()|CCache::get] を呼び、キャッシュから `$value` を取り出そうとすると、
依存関係が調査され、それが変更されていてば、データを再生成する必要が
あることを知らせるために、false 値が返ります。
以下に、利用可能なキャッシュ依存関係の概要です:
- [CFileCacheDependency]: ファイルの最終更新日時が変更された場合、
依存関係が変更されます。
- [CDirectoryCacheDependency]: ディレクトリや、サブディレクトリ下の
ファイルのいずれかが変更された場合、依存関係が変更されます。
- [CDbCacheDependency]: 指定された SQL 文のクエリ結果が変わった場合に、
依存関係が変更されます。
- [CGlobalStateCacheDependency]: 指定されたグローバルステートが変更された場合に、
依存関係が変更されます。グローバルステートは、アプリケーション内での多数のリクエスト、
および、多数のセッションを横断して持続する変数です。これは、
[CApplication::setGlobalState()] により定義されます。
- [CChainedCacheDependency]: チェーン上の依存関係のいずれかが変更された場合、
依存関係が変更されます。
- [CExpressionDependency]: 指定されたPHP表現の結果が変更された場合、依存関係が変更されます。
このクラスは、バージョン1.0.4から利用できます。
<div class="revision">$Id: caching.data.txt 891 2008-11-06 19:43:44Z qiang.xue $</div>