| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <sect1 id="zend.cache.theory">
- <title>Теория кэширования</title>
- <para>
- Есть три ключевых понятия в <classname>Zend_Cache</classname>. Первое — уникальный
- идентификатор (строка), который служит для идентификации записей кэша.
- Второе — это директива <emphasis>'lifetime'</emphasis>, которую вы могли видеть
- в предыдущих примерах; она определяет, в течение какого времени
- кэшируемый ресурс считается "свежим". Третье понятие — условное
- исполнение, используемое для того, чтобы части вашего кода могли быть
- пропущены целиком, этим повышается производительность. Основной метод
- фронтэнда (например, <methodname>Zend_Cache_Core::get()</methodname>) всегда
- спроектирован так, чтобы возвращать <constant>FALSE</constant> при промахе кэша,
- если это имеет смысл для данного фронэнда. Это дает конечным
- пользователям возможность включать части кода, которые нужно
- кэшировать (и затем пропускать) в операторы <emphasis>if(){ ... }</emphasis>,
- где условием является сам метод <classname>Zend_Cache</classname>. Но в конце
- этих блоков вы должны сохранять то, что было сгенерировано (например,
- методом <methodname>Zend_Cache_Core::save()</methodname>).
- </para>
- <note><para>
- Для некоторых фронтэндов включение условного исполнения в
- код не нужно, так как вся логика уже реализована в них
- (например, <emphasis>Function</emphasis>).
- </para></note>
- <note><para>
- "Попадание в кэш" — термин для определения того состояния, когда запись
- кэша найдена, является корректной и "свежей" (другими словами, для
- которой не закончился срок действия). Иначе имеет место "промах кэша".
- Когда происходит "промах кэша", вы должны сгенерировать свои данные,
- которые помещаются в кэш. С другой стороны, если есть "попадание",
- то бэкэнд автоматически извлечет запись из кэша.
- </para></note>
- <sect2 id="zend.cache.factory">
- <title>Фабричный метод Zend_Cache</title>
- <para>
- Корректным способом создания рабочего экземпляра
- фронтэнда <classname>Zend_Cache</classname> является код показанный в
- следующем примере:
- </para>
- <programlisting language="php"><![CDATA[
- // Выбираем бэкэнд (например, 'File' или 'Sqlite'...)
- $backendName = '[...]';
- // Выбираем фронтэнд (например, 'Core', 'Output', 'Page'...)
- $frontendName = '[...]';
- // Устанавливаем массив опций для выбранного фронтэнда
- $frontendOptions = array([...]);
- // Устанавливаем массив опций для выбранного бэкэнда
- $backendOptions = array([...]);
- // Создаем экземпляр
- // (два последних аргумента являются необязательными)
- $cache = Zend_Cache::factory($frontendName,
- $backendName,
- $frontendOptions,
- $backendOptions);
- ]]></programlisting>
- <para>
- В последующих примерах мы предполагаем, что переменная
- <varname>$cache</varname> содержит инстанцированный, как показано в
- примере, фронтэнд, и что вы понимаете, как передавать параметры
- выбранному вами бэкэнду.
- </para>
- <note><para>
- Всегда используйте <methodname>Zend_Cache::factory()</methodname> для получения
- экземпляров фронтэнда. Непосредственно созданные экземпляры
- фронтэндов и бэкэндов будут работать не так, как ожидается.
- </para></note>
- </sect2>
- <sect2 id="zend.cache.tags">
- <title>Добавление тегов к записям</title>
- <para>
- Теги являются средством категоризации записей кэша. Когда вы
- производите сохранение в кэш методом <methodname>save()</methodname>, то можете
- установить массив тегов к данной записи. После этого вы можете
- удалить все записи кэша, помеченные данным тегом (тегами).
- </para>
- <programlisting language="php"><![CDATA[
- $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));
- ]]></programlisting>
- <note>
- <para>
- Метод <methodname>save()</methodname> принимает также необязательный
- четвертый параметр: <varname>$specificLifetime</varname>. Если он не
- равен <constant>FALSE</constant>, то устанавливается время жизни
- текущей записи кэша.
- </para>
- </note>
- </sect2>
- <sect2 id="zend.cache.clean">
- <title>Очистка кэша</title>
- <para>
- Для того, чтобы удалить или сделать недействительной запись с
- определенным идентификатором, вы можете использовать метод
- <methodname>remove()</methodname>:
- </para>
- <programlisting language="php"><![CDATA[
- $cache->remove('idToRemove');
- ]]></programlisting>
- <para>
- Для того, чтобы одновременно удалить или сделать
- недействительными несколько записей кэша, вы можете использовать
- метод <methodname>clean()</methodname>. Например, чтобы удалить все записи кэша:
- </para>
- <programlisting language="php"><![CDATA[
- // удаление всех записей
- $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
- // удаление только устаревших записей
- $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
- ]]></programlisting>
- <para>
- Если вы хотите удалить записи кэша, помеченные тегами 'tagA' и 'tagC':
- </para>
- <programlisting language="php"><![CDATA[
- $cache->clean(
- Zend_Cache::CLEANING_MODE_MATCHING_TAG,
- array('tagA', 'tagC')
- );
- ]]></programlisting>
- <para>
- Если вы хотите удалить записи кэша, не помеченные тегами 'tagA' и 'tagC':
- If you want to remove cache entries not matching the tags 'tagA' or 'tagC':
- </para>
- <programlisting language="php"><![CDATA[
- $cache->clean(
- Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
- array('tagA', 'tagC')
- );
- ]]></programlisting>
- <para>
- Если вы хотите удалить записи кэша, помеченные тегами 'tagA' или 'tagC':
- </para>
- <programlisting language="php"><![CDATA[
- $cache->clean(
- Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
- array('tagA', 'tagC')
- );
- ]]></programlisting>
- <para>
- Доступные режимы очищения: <constant>CLEANING_MODE_ALL</constant> (удалить
- все), <constant>CLEANING_MODE_OLD</constant> (удалить устаревшие),
- <constant>CLEANING_MODE_MATCHING_TAG</constant> (удалить помеченные тегом)
- и <constant>CLEANING_MODE_NOT_MATCHING_TAG</constant> (удалить не помеченные
- тегом). Последние два, как ясно из названия, передаются вместе с
- массивом тегов.
- </para>
- </sect2>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|