1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 21109 -->
4 <sect1 id="zend.cache.theory">
5 <title>キャッシュの仕組み</title>
8 <classname>Zend_Cache</classname> には、3 つのポイントがあります。まず最初は一意な ID (文字列) で、
9 これによってキャッシュレコードを識別します。二番目は、例に含まれる
10 <emphasis>'lifetime'</emphasis> ディレクティブです。これは、キャッシュされたリソースの
11 「賞味期限」を定義するものです。三番目のポイントとなるのが条件付きの実行処理で、
12 不要なコードを完全に読み飛ばすことで処理速度を向上させることになります。
13 フロントエンドの主となる関数 (例えば <methodname>Zend_Cache_Core::get()</methodname>)
14 は、キャッシュがヒットしなかった場合には常に <constant>FALSE</constant> を返すよう設計されています。
15 そのため、キャッシュしたい (そして読み飛ばしたい) 部分を
16 <emphasis><methodname>if()</methodname>{ ... }</emphasis> 文で囲む際に、
17 条件式として <classname>Zend_Cache</classname>
18 のメソッド自身を使用できるようになっています。
20 (例えば <methodname>Zend_Cache_Core::save()</methodname> などで)
26 条件付きの実行処理を必ず記述しなければならないわけではありません。
27 フロントエンドの種類によっては (例えば <emphasis>Function</emphasis> など)、
28 すべてのロジックがフロントエンドの中で実装されています。
34 'Cache hit (キャッシュにヒットした)' とは、キャッシュレコードが見つかり、
35 かつそのレコードが 'fresh (新鮮)' (言い換えると、まだ有効期限が切れていない)
36 状態であることを表す言葉です。'Cache miss (キャッシュが見つからなかった)'
37 はその正反対です。キャッシュが見つからなかった場合は、
38 データを (通常どおりに) 作成し、それをキャッシュしなければなりません。
40 バックエンドが自動的にキャッシュレコードを取得してくれます。
44 <sect2 id="zend.cache.factory">
45 <title>Zend_Cache ファクトリメソッド</title>
48 使用可能な <classname>Zend_Cache</classname> フロントエンドのインスタンスを作成する方法を、
52 <programlisting language="php"><![CDATA[
53 // バックエンドを選びます (例えば 'File' や 'Sqlite'...)
54 $backendName = '[...]';
56 // フロントエンドを選びます (例えば 'Core'、'Output'、'Page'...)
57 $frontendName = '[...]';
59 // 選択したフロントエンド用のオプションを配列に設定します
60 $frontendOptions = array([...]);
62 // 選択したバックエンド用のオプションを配列に設定します
63 $backendOptions = array([...]);
66 // (もちろん、最後の 2 つの引数は必須ではありません)
67 $cache = Zend_Cache::factory($frontendName,
74 これ以降のドキュメントでは、<varname>$cache</varname>
75 の中身が有効なフロントエンドになっているものとします。また、
76 選択したバックエンドにパラメータを渡す方法は理解できているものとします。
81 常に <methodname>Zend_Cache::factory()</methodname> を使用してフロントエンドの
82 インスタンスを作成するようにしてください。フロントエンドやバックエンドを
83 自前で作成しようとしても、期待通りには動作しないでしょう。
88 <sect2 id="zend.cache.tags">
89 <title>レコードのタグ付け</title>
92 タグは、キャッシュレコードを分類するための仕組みです。
93 <methodname>save()</methodname> メソッドでキャッシュを保存する際に、
94 適用するタグを配列で指定できます。これを使用すると、
95 指定したタグが設定されているキャッシュレコードのみを削除するといったことが可能となります。
98 <programlisting language="php"><![CDATA[
99 $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));
104 <methodname>save()</methodname> メソッドには、オプションの第四引数
105 <varname>$specificLifetime</varname> を指定できることに注意しましょう
106 (<constant>FALSE</constant> 以外を指定することで、このキャッシュレコードの有効期限を特定の値に設定できます)。
111 <sect2 id="zend.cache.clean">
112 <title>キャッシュの削除</title>
115 特定のキャッシュ ID を削除/無効化するには、<methodname>remove()</methodname>
119 <programlisting language="php"><![CDATA[
120 $cache->remove('削除するID');
124 一回の操作で複数のキャッシュ ID を削除/無効化するには、<methodname>clean()</methodname>
125 メソッドを使用します。例えば、すべてのキャッシュレコードを削除するには次のようにします。
128 <programlisting language="php"><![CDATA[// すべてのレコードを削除します
129 $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
131 // 有効期限切れのレコードのみ削除します
132 $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
136 タグ 'tagA' および 'tagC' に該当するキャッシュエントリを削除するには、このようにします。
139 <programlisting language="php"><![CDATA[
141 Zend_Cache::CLEANING_MODE_MATCHING_TAG,
142 array('tagA', 'tagC')
147 タグ 'tagA' にも 'tagC' にも該当しないキャッシュエントリを削除するには、このようにします。
150 <programlisting language="php"><![CDATA[
152 Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
153 array('tagA', 'tagC')
158 タグ 'tagA' または 'tagC' に該当するキャッシュエントリを削除するには、このようにします。
161 <programlisting language="php"><![CDATA[
163 Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
164 array('tagA', 'tagC')
169 削除モードとして指定可能な値は <constant>CLEANING_MODE_ALL</constant>、<constant>CLEANING_MODE_OLD</constant>、
170 <constant>CLEANING_MODE_MATCHING_TAG</constant>、<constant>CLEANING_MODE_NOT_MATCHING_TAG</constant> および
171 <constant>CLEANING_MODE_MATCHING_ANY_TAG</constant> です。
172 後者は、その名が示すとおり、タグの配列と組み合わせて使用します。