Es propio de las aplicaciones requerir multitud de cachés de cualquier
tipo, a menudo dependiendo del controlador, la librería o el modelo de dominio al que se
accede. Para permitir un medio sencillo de definir por adelantado las opciones de Zend_Cache
(por ejemplo, desde un bootstrap), de modo que acceder a un objeto de caché
requiera una configuración mínima dentro del código fuente de la aplicación, se escribió la clase
Zend_Cache_Manager. Esta clase
va acompañada de Zend_Application_Resource_Cachemanager
para garantizar que la configuración de arranque esté disponible, y de
Zend_Controller_Action_Helper_Cache para permitir un acceso e instanciación
sencillos de la caché desde controladores y otros ayudantes (helpers).
El funcionamiento básico de este componente es el siguiente. El gestor de caché permite a los usuarios configurar
"plantillas de opciones", básicamente opciones para un conjunto de cachés con nombre. Estas se pueden establecer usando el
método Zend_Cache_Manager::setCacheTemplate().
Estas plantillas no dan lugar a una caché hasta que el usuario intenta recuperar
una caché con nombre (asociada a una plantilla de opciones existente) usando el método
Zend_Cache_Manager::getCache().
$manager = new Zend_Cache_Manager;
$dbCache = array(
'frontend' => array(
'name' => 'Core',
'options' => array(
'lifetime' => 7200,
'automatic_serialization' => true
)
),
'backend' => array(
'name' => 'Core',
'options' => array(
'cache_dir' => '/path/to/cache'
)
)
);
$manager->setCacheTemplate('database', $dbCache);
/**
* Anywhere else where the Cache Manager is available...
*/
$databaseCache = $manager->getCache('database');
El gestor de caché también permite establecer de forma sencilla cachés ya instanciadas
usando el método Zend_Cache_Manager::setCache().
$frontendOptions = array(
'lifetime' => 7200,
'automatic_serialization' => true
);
$backendOptions = array(
'cache_dir' => '/path/to/cache'
);
$dbCache = Zend_Cache::factory('Core',
'File',
$frontendOptions,
$backendOptions);
$manager = new Zend_Cache_Manager;
$manager->setCache('database', $dbCache);
/**
* Anywhere else where the Cache Manager is available...
*/
$databaseCache = $manager->getCache('database');
Si por cualquier razón no está seguro de si el gestor de caché contiene una
caché ya instanciada o una plantilla de opciones relevante para crear una
cuando se solicite, puede comprobar la existencia de una configuración o instancia de caché con nombre
usando el método Zend_Cache_Manager::hasCache().
$manager = new Zend_Cache_Manager;
$dbCache = array(
'frontend' => array(
'name' => 'Core',
'options' => array(
'lifetime' => 7200,
'automatic_serialization' => true
)
),
'backend' => array(
'name' => 'Core',
'options' => array(
'cache_dir' => '/path/to/cache'
)
)
);
$manager->setCacheTemplate('database', $dbCache);
/**
* Anywhere else where the Cache Manager is available...
*/
if ($manager->hasCache('database')) {
$databaseCache = $manager->getCache('database');
} else {
// create a cache from scratch if none available from Manager
}
En algunos escenarios, puede que haya definido varias cachés de uso general
usando Zend_Cache_Manager, pero necesite ajustar
sus opciones antes de usarlas dependiendo de las circunstancias. Puede editar
plantillas de caché previamente establecidas sobre la marcha antes de que se instancien
usando el método Zend_Cache_Manager::setTemplateOptions().
$manager = new Zend_Cache_Manager;
$dbCache = array(
'frontend' => array(
'name' => 'Core',
'options' => array(
'lifetime' => 7200,
'automatic_serialization' => true
)
),
'backend' => array(
'name' => 'Core',
'options' => array(
'cache_dir' => '/path/to/cache'
)
)
);
$manager->setCacheTemplate('database', $dbCache);
/**
* Anywhere else where the Cache Manager is available...
* Here we decided to store some upcoming database queries to Memcached instead
* of the preconfigured File backend.
*/
$fineTuning = array(
'backend' => array(
'name' => 'Memcached',
'options' => array(
'servers' => array(
array(
'host' => 'localhost',
'port' => 11211,
'persistent' => true,
'weight' => 1,
'timeout' => 5,
'retry_interval' => 15,
'status' => true,
'failure_callback' => ''
)
)
)
)
);
$manager->setTemplateOptions('database', $fineTuning);
$databaseCache = $manager->getCache('database');
Para ayudar a que el gestor de caché sea más útil, va acompañado de
Zend_Application_Resource_Cachemanager y también
del ayudante de acción (Action Helper) Zend_Controller_Action_Helper_Cache.
Ambos se describen en sus áreas relevantes de la
Guía de referencia.
Ya de fábrica, Zend_Cache_Manager incluye
tres plantillas de caché predefinidas llamadas "default", "page" y "pagetag".
La caché "default" es una caché sencilla basada en archivos (File) que usa el frontend Core.
Las dos cachés restantes se utilizan para implementar una caché de páginas estáticas (Static Page Cache) por defecto
en la que HTML, XML o incluso JSON estáticos
pueden escribirse en archivos estáticos en /public. El control sobre una caché de páginas estáticas
se ofrece a través de Zend_Controller_Action_Helper_Cache, aunque
puede alterar la configuración de la caché "page" o "pagetag" que utiliza para rastrear etiquetas mediante
Zend_Cache_Manager::setTemplateOptions() o incluso
Zend_Cache_Manager::setCacheTemplate() si desea sobrescribir
todas sus opciones.