1 <?xml version="1.0" encoding="UTF-8"?>
3 <sect1 id="zend.cache.theory">
4 <title>Теория кэширования</title>
6 Есть три ключевых понятия в <classname>Zend_Cache</classname>. Первое — уникальный
7 идентификатор (строка), который служит для идентификации записей кэша.
8 Второе — это директива <emphasis>'lifetime'</emphasis>, которую вы могли видеть
9 в предыдущих примерах; она определяет, в течение какого времени
10 кэшируемый ресурс считается "свежим". Третье понятие — условное
11 исполнение, используемое для того, чтобы части вашего кода могли быть
12 пропущены целиком, этим повышается производительность. Основной метод
13 фронтэнда (например, <methodname>Zend_Cache_Core::get()</methodname>) всегда
14 спроектирован так, чтобы возвращать <constant>FALSE</constant> при промахе кэша,
15 если это имеет смысл для данного фронэнда. Это дает конечным
16 пользователям возможность включать части кода, которые нужно
17 кэшировать (и затем пропускать) в операторы <emphasis>if(){ ... }</emphasis>,
18 где условием является сам метод <classname>Zend_Cache</classname>. Но в конце
19 этих блоков вы должны сохранять то, что было сгенерировано (например,
20 методом <methodname>Zend_Cache_Core::save()</methodname>).
23 Для некоторых фронтэндов включение условного исполнения в
24 код не нужно, так как вся логика уже реализована в них
25 (например, <emphasis>Function</emphasis>).
28 "Попадание в кэш" — термин для определения того состояния, когда запись
29 кэша найдена, является корректной и "свежей" (другими словами, для
30 которой не закончился срок действия). Иначе имеет место "промах кэша".
31 Когда происходит "промах кэша", вы должны сгенерировать свои данные,
32 которые помещаются в кэш. С другой стороны, если есть "попадание",
33 то бэкэнд автоматически извлечет запись из кэша.
35 <sect2 id="zend.cache.factory">
36 <title>Фабричный метод Zend_Cache</title>
38 Корректным способом создания рабочего экземпляра
39 фронтэнда <classname>Zend_Cache</classname> является код показанный в
42 <programlisting language="php"><![CDATA[
43 // Выбираем бэкэнд (например, 'File' или 'Sqlite'...)
44 $backendName = '[...]';
46 // Выбираем фронтэнд (например, 'Core', 'Output', 'Page'...)
47 $frontendName = '[...]';
49 // Устанавливаем массив опций для выбранного фронтэнда
50 $frontendOptions = array([...]);
52 // Устанавливаем массив опций для выбранного бэкэнда
53 $backendOptions = array([...]);
56 // (два последних аргумента являются необязательными)
57 $cache = Zend_Cache::factory($frontendName,
63 В последующих примерах мы предполагаем, что переменная
64 <varname>$cache</varname> содержит инстанцированный, как показано в
65 примере, фронтэнд, и что вы понимаете, как передавать параметры
66 выбранному вами бэкэнду.
69 Всегда используйте <methodname>Zend_Cache::factory()</methodname> для получения
70 экземпляров фронтэнда. Непосредственно созданные экземпляры
71 фронтэндов и бэкэндов будут работать не так, как ожидается.
75 <sect2 id="zend.cache.tags">
76 <title>Добавление тегов к записям</title>
78 Теги являются средством категоризации записей кэша. Когда вы
79 производите сохранение в кэш методом <methodname>save()</methodname>, то можете
80 установить массив тегов к данной записи. После этого вы можете
81 удалить все записи кэша, помеченные данным тегом (тегами).
83 <programlisting language="php"><![CDATA[
84 $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));
88 Метод <methodname>save()</methodname> принимает также необязательный
89 четвертый параметр: <varname>$specificLifetime</varname>. Если он не
90 равен <constant>FALSE</constant>, то устанавливается время жизни
95 <sect2 id="zend.cache.clean">
96 <title>Очистка кэша</title>
98 Для того, чтобы удалить или сделать недействительной запись с
99 определенным идентификатором, вы можете использовать метод
100 <methodname>remove()</methodname>:
102 <programlisting language="php"><![CDATA[
103 $cache->remove('idToRemove');
106 Для того, чтобы одновременно удалить или сделать
107 недействительными несколько записей кэша, вы можете использовать
108 метод <methodname>clean()</methodname>. Например, чтобы удалить все записи кэша:
110 <programlisting language="php"><![CDATA[
111 // удаление всех записей
112 $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
114 // удаление только устаревших записей
115 $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
118 Если вы хотите удалить записи кэша, помеченные тегами 'tagA' и 'tagC':
120 <programlisting language="php"><![CDATA[
122 Zend_Cache::CLEANING_MODE_MATCHING_TAG,
123 array('tagA', 'tagC')
127 Если вы хотите удалить записи кэша, не помеченные тегами 'tagA' и 'tagC':
128 If you want to remove cache entries not matching the tags 'tagA' or 'tagC':
130 <programlisting language="php"><![CDATA[
132 Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
133 array('tagA', 'tagC')
137 Если вы хотите удалить записи кэша, помеченные тегами 'tagA' или 'tagC':
139 <programlisting language="php"><![CDATA[
141 Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
142 array('tagA', 'tagC')
146 Доступные режимы очищения: <constant>CLEANING_MODE_ALL</constant> (удалить
147 все), <constant>CLEANING_MODE_OLD</constant> (удалить устаревшие),
148 <constant>CLEANING_MODE_MATCHING_TAG</constant> (удалить помеченные тегом)
149 и <constant>CLEANING_MODE_NOT_MATCHING_TAG</constant> (удалить не помеченные
150 тегом). Последние два, как ясно из названия, передаются вместе с