mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-04 23:34:05 +01:00
115 lines
5.6 KiB
Plaintext
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>
|