0 follower

データキャッシュ

データキャッシュは、PHP 変数をキャッシュし、 後でそのキャッシュから読み込めるようにします。 この目的のために、キャッシュコンポーネントのベースクラス CCache は、 多くの場合に利用される set()get() の 2 つのメソッドを提供します。

キャッシュに変数 $value を保存するには、ユニーク ID を選び、 set() を呼びます:

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

キャッシュされたデータは、キャッシングポリシー(たとえば、 キャッシュ容量いっぱいになれば、一番古いデータが削除されます)のために、 キャッシュが消されない限りずっと残ります。 この挙動を変えるために、set() を呼ぶときに、 有効期限パラメータを指定し、一定の期間の後、キャッシュが削除されるように する事もできます。

// 最大 30 秒間、キャッシュに値が保持される
Yii::app()->cache->set($id, $value, 30);

その後、この変数(同じ、あるいは別のウェブリクエスト中に)にアクセスする必要がある場合、 その ID を指定して get() を呼べば、キャッシュから読み込めます。 もし、返り値が false なら、値がキャッシュされていないため、 キャッシュを再生成する必要があります。

$value=Yii::app()->cache->get($id);
if($value===false)
{
    // キャッシュが見つからなかったため、
    // 後で利用できるように、$value のキャッシュを再生成し保存します:
    // Yii::app()->cache->set($id,$value);
}

変数をキャッシュするために ID を選ぶとき、 ID がアプリケーション中でキャッシュされるかもしれない、 他の全ての変数内でユニークである事を確かめてください。 キャッシュコンポーネントでは、他のアプリケーションで同じ ID が使われていたとしても それらを区別出来るため、ID がアプリケーションを横切ってユニークである必要はありません。

キャッシュから、キャッシュされた値を削除するには、delete() を呼びます。また、全てのキャッシュを削除するには、flush() を呼びます。flush() は、他のアプリケーションのデータを含む、 全てのキャッシュデータを削除するため、このメソッドを呼ぶ際は、 細心の注意を払ってください。

ヒント: CCacheArrayAccess により実装されているため、 キャッシュコンポーネントは配列のように扱えます。下記に例を示します:

$cache=Yii::app()->cache;
$cache['var1']=$value1;  // $cache->set('var1',$value1); と同等
$value2=$cache['var2'];  // $value2=$cache->get('var2'); と同等

1. キャッシュ依存関係

有効期限設定に加えて、キャッシュデータも依存関係のあるデータの変更により、 無効にされるかもしれません。 たとえば、あるファイルの内容がキャッシュされており、ファイルが変更された場合、 キャッシュされたコピーを無効にし、キャッシュの代わりにファイルから 最新のデータを読み込む必要があります。

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から利用できます。