[ZF-10089] Zend_Log
[zend.git] / documentation / manual / ru / module_specs / Zend_Cache-Theory.xml
blob75d358c2f03280586860605aa8274a443974a6a6
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Reviewed: no -->
3 <sect1 id="zend.cache.theory">
4     <title>Теория кэширования</title>
5     <para>
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>).
21     </para>
22     <note><para>
23         Для некоторых фронтэндов включение условного исполнения в
24         код не нужно, так как вся логика уже реализована в них
25         (например, <emphasis>Function</emphasis>).
26     </para></note>
27     <note><para>
28         "Попадание в кэш" — термин для определения того состояния, когда запись
29         кэша найдена, является корректной и "свежей" (другими словами, для
30         которой не закончился срок действия). Иначе имеет место "промах кэша".
31         Когда происходит "промах кэша", вы должны сгенерировать свои данные,
32         которые помещаются в кэш. С другой стороны, если есть "попадание",
33         то бэкэнд автоматически извлечет запись из кэша.
34     </para></note>
35     <sect2 id="zend.cache.factory">
36         <title>Фабричный метод Zend_Cache</title>
37         <para>
38             Корректным способом создания рабочего экземпляра
39             фронтэнда <classname>Zend_Cache</classname> является код показанный в
40             следующем примере:
41         </para>
42         <programlisting language="php"><![CDATA[
43 // Выбираем бэкэнд (например, 'File' или 'Sqlite'...)
44 $backendName = '[...]';
46 // Выбираем фронтэнд (например, 'Core', 'Output', 'Page'...)
47 $frontendName = '[...]';
49 // Устанавливаем массив опций для выбранного фронтэнда
50 $frontendOptions = array([...]);
52 // Устанавливаем массив опций для выбранного бэкэнда
53 $backendOptions = array([...]);
55 // Создаем экземпляр
56 // (два последних аргумента являются необязательными)
57 $cache = Zend_Cache::factory($frontendName,
58                              $backendName,
59                              $frontendOptions,
60                              $backendOptions);
61 ]]></programlisting>
62         <para>
63             В последующих примерах мы предполагаем, что переменная
64             <varname>$cache</varname> содержит инстанцированный, как показано в
65             примере, фронтэнд, и что вы понимаете, как передавать параметры
66             выбранному вами бэкэнду.
67         </para>
68         <note><para>
69             Всегда используйте <methodname>Zend_Cache::factory()</methodname> для получения
70             экземпляров фронтэнда. Непосредственно созданные экземпляры
71             фронтэндов и бэкэндов будут работать не так, как ожидается.
72         </para></note>
73     </sect2>
75     <sect2 id="zend.cache.tags">
76         <title>Добавление тегов к записям</title>
77         <para>
78             Теги являются средством категоризации записей кэша. Когда вы
79             производите сохранение в кэш методом <methodname>save()</methodname>, то можете
80             установить массив тегов к данной записи. После этого вы можете
81             удалить все записи кэша, помеченные данным тегом (тегами).
82         </para>
83         <programlisting language="php"><![CDATA[
84 $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));
85 ]]></programlisting>
86         <note>
87             <para>
88                 Метод <methodname>save()</methodname> принимает также необязательный
89                 четвертый параметр: <varname>$specificLifetime</varname>. Если он не
90                 равен <constant>FALSE</constant>, то устанавливается время жизни
91                 текущей записи кэша.
92             </para>
93         </note>
94     </sect2>
95     <sect2 id="zend.cache.clean">
96         <title>Очистка кэша</title>
97         <para>
98             Для того, чтобы удалить или сделать недействительной запись с
99             определенным идентификатором, вы можете использовать метод
100             <methodname>remove()</methodname>:
101         </para>
102         <programlisting language="php"><![CDATA[
103 $cache->remove('idToRemove');
104 ]]></programlisting>
105         <para>
106             Для того, чтобы одновременно удалить или сделать
107             недействительными несколько записей кэша, вы можете использовать
108             метод <methodname>clean()</methodname>. Например, чтобы удалить все записи кэша:
109         </para>
110         <programlisting language="php"><![CDATA[
111 // удаление всех записей
112 $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
114 // удаление только устаревших записей
115 $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
116 ]]></programlisting>
117         <para>
118             Если вы хотите удалить записи кэша, помеченные тегами 'tagA' и 'tagC':
119         </para>
120         <programlisting language="php"><![CDATA[
121 $cache->clean(
122     Zend_Cache::CLEANING_MODE_MATCHING_TAG,
123     array('tagA', 'tagC')
125 ]]></programlisting>
126         <para>
127             Если вы хотите удалить записи кэша, не помеченные тегами 'tagA' и 'tagC':
128             If you want to remove cache entries not matching the tags 'tagA' or 'tagC':
129         </para>
130         <programlisting language="php"><![CDATA[
131 $cache->clean(
132     Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
133     array('tagA', 'tagC')
135 ]]></programlisting>
136         <para>
137             Если вы хотите удалить записи кэша, помеченные тегами 'tagA' или 'tagC':
138         </para>
139         <programlisting language="php"><![CDATA[
140 $cache->clean(
141     Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
142     array('tagA', 'tagC')
144 ]]></programlisting>
145         <para>
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             тегом). Последние два, как ясно из названия, передаются вместе с
151             массивом тегов.
152         </para>
153     </sect2>
154 </sect1>
155 <!--
156 vim:se ts=4 sw=4 et: