2.2. Теория кэширования
Пред. | Глава 2. Zend_Cache | След.

## 2.2. Теория кэширования

Есть три ключевых понятия в Zend_Cache. Первое -- уникальный идентификатор (строка), который служит для идентификации записей кэша. Второе -- это директива `'lifeTime'`, которую вы могли видеть в предыдущих примерах; она определяет, в течение какого времени кэшируемый ресурс считается "свежим". Третье понятие -- условное исполнение, используемое для того, чтобы части вашего кода могли быть пропущены целиком, этим повышается производительность. Основной метод фронтэнда (например, `Zend_Cache_Core::get()`) всегда спроектирован так, чтобы должен возвращать `false` при промахе кэша, если это имеет смысл для данного фронэнда. Это дает конечным пользователям возможность включать части кода, которые нужно кэшировать (и затем пропускать) в операторы `if(){ ... }`, где условием является сам метод Zend_Cache. Но в конце этих блоков вы должны сохранять то, что было сгенерировано (например, методом `Zend_Cache_Core::save()`).

| Замечание
Для некоторых фронтэндов включение условного исполнения в код не нужно, так как вся логика уже реализована в них (например, `Function`).

| Замечание
"Попадание в кэш" -- термин для того состояния, когда запись кэша найдена, является корректной и "свежей" (в других словах, для которой не закончился срок действия). Иначе имеет место "промах кэша". Когда происходит "промах кэша", вы должны сгенерировать свои данные, которые помещаются в кэш. С другой стороны, если есть "попадание", то бэкэнд автоматически извлечет запись из кэша.

### 2.2.1. Фабричный метод `Zend_Cache`

Корректным способом создания рабочего экземпляра фронтэнда `Zend_Cache` является код показанный в следующем примере:

    <?php

    # Загружаем фабрику Zend_Cache
    require 'Zend/Cache.php';

    # Выбираем бэкэнд (например, 'File' или 'Sqlite'...)
    $backendName = '[...]';

    # Выбираем фронтэнд (например, 'Core', 'Output', 'Page'...)
    $frontendName = '[...]';

    # Устанавливаем массив опций для выбранного фронтэнда
    $frontendOptions = array([...]);

    # Устанавливаем массив опций для выбранного бэкэнда
    $backendOptions = array([...]);

    # Создаем экземпляр
    # (два последних аргумента являются необязательными)
    $cache = Zend_Cache::factory($frontendName, $backendName, $frontendOptions, $backendOptions);

    ?>

В следующих примерах мы предполагаем, что переменная `$cache` содержит инстанцированный, как показано в примере, фронтэнд, и что вы понимаете, как передавать параметры выбранному вами бэкэнду.

| Замечание
Всегда используйте `Zend_Cache::factory()` для получения экземпляров фронтэнда. Непосредственно созданные экземпляры фронтэндов и бэкэндов будут работать не так, как ожидается.

### 2.2.2. Добавление тегов к записям

Теги являются средством категоризации записей кэша. Когда вы производите сохранение в кэш методом `save()`, то можете установить массив тегов к данной записи. После этого вы можете удалить все записи кэша, помеченные данным тегом (тегами).

    <?php

    $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));

    ?>

### 2.2.3. Очистка кэша

Для того, чтобы удалить или сделать недействительной запись с определенным идентификатором, вы можете использовать метод `remove()`:

    <?php

    $cache->remove('idToRemove');

    ?>

Для того, чтобы за одну операцию удалить или сделать недействительными несколько записей кэша, вы можете использовать метод `clean()`. Например, чтобы удалить все записи кэша:

    <?php

    // удаление всех записей
    $cache->clean(Zend_Cache::CLEANING_MODE_ALL);

    // удаление только устаревших записей
    $cache->clean(Zend_Cache::CLEANING_MODE_OLD);

    ?>

Если вы хотите удалить записи кэша, помеченные тегами 'tagA' и 'tagC':

    <?php

    $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('tagA', 'tagC'));

    ?>

Доступные режимы очищения: `CLEANING_MODE_ALL` (удалить все), `CLEANING_MODE_OLD` (удалить устаревшие), `CLEANING_MODE_MATCHING_TAG` (удалить помеченные тегом) и `CLEANING_MODE_NOT_MATCHING_TAG` (удалить не помеченные тегом). Последние два, как ясно из названий, передаются вместе с массивом тегов.

Пред. | Уровень выше | След.
Глава 2. Zend_Cache | Начало | 2.3. Фронтэнды Zend_Cache