導入Zend_Cache は、任意のデータをキャッシュするための一般的な手法を提供します。 Zend Framework におけるキャッシュ処理はフロントエンドで行われ、キャッシュレコードの保存には バックエンドのアダプタ (File、Sqlite、Memcache...) を使用します。ID およびタグを使用した柔軟な仕組みが用いられています。これらを使用することで、 キャッシュデータの一部だけを削除する (「指定したタグがつけられているキャッシュレコードをすべて削除する」 など) といったことも簡単にできるようになります。 このモジュールの中心となる部分 (Zend_Cache_Core) は、標準的で柔軟なものとなっています。 設定変更も可能です。とは言え、 特定の目的のためには、より適切な実行結果を得るためのフロントエンド Zend_Cache_Core を拡張する (たとえば Output、File、Function、Class など) こともできます。 Example #1 Zend_Cache::factory() によるフロントエンドの取得 Zend_Cache::factory() は、適切なオブジェクトを作成してそれらを互いに結び付けます。 この最初の例では、フロントエンドに Core、バックエンドに File を使用します。
Example #2 データベースへのクエリの結果のキャッシュ これでフロントエンドが得られました。あらゆる種類のデータを保存できます (そのために、シリアライズを有効にしました)。例えば、非常に時間がかかるデータベースクエリの結果を キャッシュすることが可能です。いったんキャッシュしてしまえば、 あとはデータベースに接続する必要さえありません。キャッシュから取得したレコードを アンシリアライズしてデータを取得すればよいのです。
Example #3 Zend_Cache 出力フロントエンドによる出力のキャッシュ まず、出力をキャッシュしたい部分を何らかの条件式で「マークアップ」し、 その前後を start() メソッドおよび end() メソッドで囲みます (これは最初の例に似ており、キャッシュ処理の基本となる考え方です)。 内部では、通常通りに出力を行います。出力内容は、 end() メソッドに到達するまでずっとキャッシュされます。次回の実行時には、 このセクションが読み飛ばされ、その代わりにキャッシュから取得したデータが使用されます (キャッシュレコードが有効なものである限ります)。
time() の結果を二度出力していることに注目しましょう。 動作説明のため、何らかの動的な出力がほしかったのです。これを実行し、 さらに何度か「最新の情報に更新」してみましょう。 ふたつめの値が時とともに変化していくのに対して、 最初の方の値は変化しないことに気づかれるでしょう。 なぜなら、最初の値はキャッシュされたセクションの出力であり、 その他の内容とともにキャッシュに保存されているからです。 30 秒経過すると (有効期限を 30 秒に設定したので)、 ふたつの値は再び一致するようになります。これはキャッシュレコードが 有効期限切れになり、もう一度キャッシュしなおされたからです。 この例は、ブラウザあるいはコンソールで試してみてください。
|