Главная / Zend Manual Core
Введение

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

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

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

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

Фабричный метод Zend_Cache

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

  1. // Выбираем бэкэнд (например, 'File' или 'Sqlite'...)
  2. $backendName = '[...]';
  3.  
  4. // Выбираем фронтэнд (например, 'Core', 'Output', 'Page'...)
  5. $frontendName = '[...]';
  6.  
  7. // Устанавливаем массив опций для выбранного фронтэнда
  8. $frontendOptions = array([...]);
  9.  
  10. // Устанавливаем массив опций для выбранного бэкэнда
  11. $backendOptions = array([...]);
  12.  
  13. // Создаем экземпляр
  14. // (два последних аргумента являются необязательными)
  15. $cache = Zend_Cache::factory($frontendName,
  16.                              $backendName,
  17.                              $frontendOptions,
  18.                              $backendOptions);

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

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

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

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

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

Note: Метод save() принимает также необязательный четвертый параметр: $specificLifetime. Если он не равен FALSE, то устанавливается время жизни текущей записи кэша.

Очистка кэша

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

  1. $cache->remove('idToRemove');

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

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

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

  1. $cache->clean(
  2.     Zend_Cache::CLEANING_MODE_MATCHING_TAG,
  3.     array('tagA', 'tagC')
  4. );

Если вы хотите удалить записи кэша, не помеченные тегами 'tagA' и 'tagC': If you want to remove cache entries not matching the tags 'tagA' or 'tagC':

  1. $cache->clean(
  2.     Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
  3.     array('tagA', 'tagC')
  4. );

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

  1. $cache->clean(
  2.     Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
  3.     array('tagA', 'tagC')
  4. );

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


Введение