2.3. Zend_Cache_Core
Пред. | Глава 2. Zend_Cache | След.

## 2.3. Zend_Cache_Core

### 2.3.1. Введение

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

### 2.3.2. Доступные опции

Таблица 2.1. Доступные опции

Опция | Тип данных | Значение по умолчанию | Описание
--- | --- | --- | ---
`caching` | `boolean` | `true` | Включает / отключает кэширование (может быть очень полезным при отладке кэшируемых скриптов)
`lifeTime` | `int` | `3600` | Время жизни кэша (в секундах), если установлен в `null`, то кэш имеет бесконечное время жизни.
`logging` | `boolean` | `false` | Если установлен в true, то включается логирование посредством `Zend_Log` (система будет работать медленнее).
`writeControl` | `boolean` | `true` | Включает / отключает контроль записи (кэш читается сразу после записи для выявления поврежденных записей), включение writeControl немного замедлит запись кэша, но не чтение (этот контроль может выявить некоторые поврежденные файлы кэша, но не является совершенным).
`automaticSerialization` | `boolean` | `false` | Включает / отключает автоматическую сериализацию, она может использоваться для сохранения напрямую данных, которые не являются строками (но это будет меденнее).
`automaticCleaningFactor` | `int` | `0` | Отключает / настраивает автоматический процесс очистки (сборщик мусора) : `0` означает, что автоматическая чистка кэша не производится, `1` означает систематическую очистку кэша, `x (integer) > 1` означает, что автоматическая чистка производится случайным образом 1 раз на x записей кэша.

### 2.3.3. Примеры

Первый пример дан в самом начале.

Если вы храните в кэше только строки (с опцией "automaticSerialization" возможно хранить некоторые булевы значения), вы можете использовать более компактную конструкцию, похожую на:

    <?php

    // [...] // включения, конфигурирование, фабрика

    $id = 'foo'; // идентификатор того, что мы хотим закэшировать

    if (!($data = $cache->get($id))) {
    	// кэш отсутствует

    	$data = '';
    	for ($i=0;$i<10000;$i++) {
    		$data = $data . $i;
    	}

        $cache->save($data);

    }

    // [...] делаем что-нибудь с данными (например, "echo $data;")

    ?>

Если вы хотите закэшировать несколько блоков данных, то принцип будет тот же:

    <?php

    // [...] // включения, конфигурирование, фабрика

    $id1 = 'foo'; // идентификатор кэша блока 1
    $id2 = 'bar'; // идентификатор кэша блока 2

    // БЛОК 1
    if (!($data = $cache->get($id1))) {
    	// кэш отсутствует

    	$data = '';
    	for ($i=0;$i<10000;$i++) {
    		$data = $data . $i;
    	}

        $cache->save($data);

    }
    echo($data);

    // НЕ КЭШИРУЕМЫЙ БЛОК
    echo('НЕ КЭШИРУЕТСЯ!');

    // БЛОК 2
    if (!($data = $cache->get($id2))) {
    	// кэш отсутствует

    	$data = '';
    	for ($i=0;$i<10000;$i++) {
    		$data = $data . '!';
    	}

        $cache->save($data);

    }
    echo($data);

    ?>

### 2.3.4. Идетификатор и теги кэша

Идентификатором кэша является уникальный ключ, который идентифицирует данную запись кэша. В некоторых пользовательских частях (Core, Output...) вы имеете дело с идентификаторами кэша. Поэтому, например, будьте осторожны при использовании уникальных идентификаторов для данной страницы или блока.

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

Вот полный синтаксис метода `save()`:

    <?php

        /**
         * Сохраняет данные в кэше
         *
         * @param mixed $data данные для размещения в кэше (может иметь тип, отличный от строкового, если automaticSerialization включен)
         * @param cache $id cache id (если не установлен, то будет использоваться последний id кэша)
         * @param array $tags теги кэша
         * @return boolean true, если не было ошибки
         */
        public function save($data, $id = null, $tags = array()) {}

    ?>

Так, например, вы можете использовать:

    <?php

    // [...]
    $cache->save('данные для сохранения', 'уникальный ID', array('тег1', 'тег4', 'тег5'));
    // [...]

    ?>

### 2.3.5. Очищение кэша

Чтобы удалить / сделать недействительным отдельный идентификатор кэша, вы можете использовать метод `remove()`:

    <?php

    // [...]
    $cache->remove('ID для удаления');
    // [...]

    ?>

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

    <?php

    // [...]
    $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
    // [...]

    ?>

Если вы хотите удалить только устаревшие записи:

    <?php

    // [...]
    $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
    // [...]

    ?>

Если вы хотите удалить записи кэша, соответствующие тегам 'тег1' и 'тег3':

    <?php

    // [...]
    $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('тег1', 'тег3'));
    // [...]

    ?>

[...]

Пред. | Уровень выше | След.
2.2. Фабрика Zend_Cache | Начало | 2.4. Zend_Cache_Output