Отправляет email-рассылки с помощью сервиса Sendsay

PHP 5: Новые возможности.

  Все выпуски  

ZEND FRAMEWORK: Класс Zend_Cache


PHP 5: Новые возможности.

Кеширование (временное сохранение данных для повторного использования) способно существенно повысить производительность приложения за счет уменьшения количества операций, требующих значительных затрат времени или ресурсов [12]. Удобный механизм кеширования в Zend Framework предоставлен классом Zend_Cache и родственными ему классами.

Управлять кешированием можно через программный интерфейс специальных адаптеров переднего плана (frontend adapters), в то время как фоновые адаптеры (backend adapters) обеспечивают непосредственную запись данных.

Используемая система сохранения данных является достаточно гибкой и позволяет выборочно оперировать с отдельными записями на основе специальных маркеров (идентификаторов и тэгов).

Ключевые принципы. В основе работы класса Zend_Cache лежат три ключевых принципа: уникальный идентификатор для каждой записи; время, в течение которого сохраненные ресурсы считаются «свежими»; условное исполнение, позволяющее пропускать исполнение кода, если его результат уже содержится в кеше.

Рабочий объект. Для получения рабочего объекта используется статический метод factory() класса Zend_Cache. Ему передаются в качестве параметров названия адаптеров (переднего плана и фонового), а также массивы конфигурационных опций для этих адаптеров (см. «Адаптеры переднего плана», «Фоновые адаптеры»).

<?php

require 'Zend/Cache.php'; 1

$frontendName = '/* ... */'; 2
$backendName = '/* ... */'; 3
$frontendOptions = array(/* ... */); 4
$backendOptions = array(/* ... */); 5

$cache = Zend_Cache::factory($frontendName, $backendName,
    $frontendOptions, $backendOptions); 6

        
1

Включение файла с определением класса Zend_Cache. Может быть пропущено, если корректно определена функция автозагрузки __autoload().

2 3

Названия адаптеров, которые будет использовать рабочий объект.

4 5

Конфигурационные опции адаптеров, перекрывающие настройки по умолчанию.

6

Создание рабочего объекта. Последние два параметра могут быть опущены.

Сохранение данных. Производится с помощью метода save(), которому передаются сохраняемые данные и уникальный идентификатор записи.

$cache->save($data, $id);

Получение данных. Производится с помощью метода get(), которому передается уникальный идентификатор искомой записи и который возвращает запрошенные данные в случае успешной попытки (hit)[7] и логическое значение false во всех остальных случаях.

<?php

if (!$data = $cache->get($id)) {
    // make data here
    $this->save($data, $id);
}

// use data here

        

Разметка записей. Производится при сохранении данных. Помимо уникального идентификатора, каждой записи может быть присвоен набор тэгов.

$cache->save($data, $id, array($tagA, $tagB, $tagC));

Очистка кеша. Может быть произведена на индивидуальной основе (отдельная запись по ее уникальному идентификатору), на групповой основе (записи с определенными тэгами или без них) и для всего кеша (все или только устаревшие записи).

$cache->remove($id);
$cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array($tagA, $tagC));
$cache->clean(Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG, array($tagA, $tagC));
$cache->clean(Zend_Cache::CLEANING_MODE_ALL);
$cache->clean(Zend_Cache::CLEANING_MODE_OLD);

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

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

Класс Zend_Cache_Frontend_Function предназначен для кеширования результатов вызова функции; причем, сохраняется не только возвращаемая величина, но и внутренний вывод вызываемой функции (если он есть). Используется единственный метод call(), которому передается название функции, результат которой следует сохранить, и массив параметров, используемых при ее вызове.

Таблица 14.2. Доступные опции
Опция Тип данных Значение по умолчанию Описание
cacheByDefault boolean true Если true, результаты вызова функций будут сохраняться по умолчанию.
cachedFunctions array Названия функций, результаты вызова которых всегда сохраняются.
nonCachedFunctions array Названия функций, результаты вызова которых никогда не сохраняются.

Класс Zend_Cache_Frontend_Class позволяет кешировать объекты и вызовы статических методов классов.

Таблица 14.3. Доступные опции
Опция Тип данных Значение по умолчанию Описание
cachedEntity (обязательная) mixed Название класса или объект. В первом случае будут сохраняться вызовы статических методов данного класса, во втором - результаты вызова методов данного объекта.
cacheByDefault boolean true Если true, результаты вызова будут сохраняться по умолчанию.
cachedMethods array Названия методов, результаты вызова которых всегда сохраняются.
nonCachedMethods array Названия методов, результаты вызова которых никогда не сохраняются.

Пример 14.4. Использование Zend_Cache_Frontend_Class

<?php

$cache = Zend_Cache::factory('Class', $backendName,
    array('cachedEntity' => 'Foo')); 1

$result = $cache->bar($param1, $param2); 2

                
1

Название класса, результаты вызовов статических методов которого следует сохранять.

2

Вызов статического метода Foo::bar() с двумя параметрами.

<?php

$cache = Zend_Cache::factory('Class', $backendName,
    array('cachedEntity' => new Foo)); 1

$result = $cache->bar2($param1, $param2); 2

                
1

Объект, результаты вызовов методов которого следует сохранять.

2

Вызов метода $foo->bar2() с двумя параметрами.

Класс Zend_Cache_Frontend_File позволяет поставить срок жизни кеша в зависимость от времени последней модификации «главного» файла (master file). Удобно применять, например, для сохранения объекта конфигурации Zend_Config, полученного в результате разбора XML файла. Также может быть использован в системах шаблонов.

Таблица 14.4. Доступные опции
Опция Тип данных Значение по умолчанию Описание
masterFile (обязательная) string Полный путь и название «главного» файла.

Класс Zend_Cache_Frontend_Page подобен классу Zend_Cache_Frontend_Output, но разработан для вывода целых страниц, а не отдельных блоков. Вызывать метод end() в данном случае не нужно, так как страница при необходимости сохраняется автоматически, как только заканчивается процесс вывода. Уникальный идентификатор вычисляется автоматически на основе $_SERVER['REQUEST_URI'] и суперглобальных массивов (в зависимости от настроек).

Таблица 14.5. Доступные опции
Опция Тип данных Значение по умолчанию Описание
httpConditional boolean false В настоящее время не используется.
debugHeader boolean false Если true, перед каждой сохраненной страницей добавляется блок отладочной информации.
defaultOptions array array(/* см. Описание */) Ассоциативный массив опций по умолчанию: cache (boolean, true) - если true, кеширование включено; cacheWithGetVariables, cacheWithPostVariables, cacheWithSessionVariables, cacheWithFilesVariables, cacheWithCookieVariables (boolean, false) - если true, кеширование производится, даже если в соответствующем суперглобальном массиве имеются какие-либо переменные; makeIdWithGetVariables, makeIdWithPostVariables, makeIdWithSessionVariables, makeIdWithFilesVariables, makeIdWithCookieVariables (boolean, true) - если true, значение идентификатора зависит от содержимого соответствующего суперглобального массива.
regexps array array() Ассоциативный массив; позволяет установить опции для отдельных REQUEST_URI, используя в качестве ключей регулярные выражения.

Класс Zend_Cache_Backend_File сохраняет данные в файлах в заданной директории.

Таблица 14.6. Доступные опции
Опция Тип данных Значение по умолчанию Описание
cacheDir string '/tmp/' Директория для хранения кешированных данных.
fileLocking boolean true Разрешает / запрещает запирание файлов.
readControl boolean true Разрешает / запрещает контроль чтения. Если контроль включен, в записываемые данные внедряется контрольный ключ, позволяющий убедиться в целостности данных при считывании.
readControlType string 'crc32' Тип контроля чтения (если разрешен): md5, crc32 или strlen.
hashedDirectoryLevel int 0 Структурированность кеша (количество уровней поддиректорий).
hashedDirectoryUmask int 0700 Маска для поддиректорий кеша (если имеются).

Класс Zend_Cache_Backend_Sqlite сохраняет данные в базе данных SQLite.

Таблица 14.7. Доступные опции
Опция Тип данных Значение по умолчанию Описание
cacheDBCompletePath (обязательная) string null Полный путь (включая название файла) к базе данных SQLite.

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

Таблица 14.8. Доступные опции
Опция Тип данных Значение по умолчанию Описание
servers array array(array('host' => 'localhost','port' => 11211, 'persistent' => true)) Массив серверов.
compression boolean false Если true, возможно сжатие данных «на лету».


[7] Успешной попытка считается в случае наличия в кеше непросроченных данных с запрошенным идентификатором.

Created with DocBook


В избранное