TigerZF
🌐Español

17.2. Teoría de la caché

Hay tres conceptos clave en Zend_Cache. Uno es el identificador único (una cadena) que se usa para identificar los registros de caché. El segundo es la directiva 'lifetime', tal como se ve en los ejemplos; define durante cuánto tiempo el recurso cacheado se considera 'fresco'. El tercer concepto clave es la ejecución condicional para que partes de su código puedan omitirse por completo, mejorando el rendimiento. La función principal del frontend (por ejemplo, Zend_Cache_Core::get()) siempre está diseñada para devolver FALSE en caso de fallo de caché si eso tiene sentido para la naturaleza de un frontend. Eso permite a los usuarios finales envolver las partes del código que desean cachear (y omitir) en instrucciones if(){ ... } donde la condición es el propio método de Zend_Cache. Al final de dichos bloques, sin embargo, debe guardar lo que ha generado (por ejemplo, Zend_Cache_Core::save()).

[Note] Nota

El diseño de ejecución condicional de su código de generación no es necesario en algunos frontends (Function, por ejemplo) cuando toda la lógica se implementa dentro del frontend.

[Note] Nota

'Acierto de caché' (cache hit) es un término para una condición en la que un registro de caché se encuentra, es válido y está 'fresco' (en otras palabras, no ha expirado todavía). 'Fallo de caché' (cache miss) es todo lo demás. Cuando ocurre un fallo de caché, debe generar sus datos (como haría normalmente) y almacenarlos en caché. Cuando tiene un acierto de caché, en cambio, el backend obtiene el registro de la caché de forma transparente y automática.

17.2.1. El método de fábrica de Zend_Cache

Una buena manera de construir una instancia utilizable de un frontend de Zend_Cache se muestra en el siguiente ejemplo:

// We choose a backend (for example 'File' or 'Sqlite'...)
$backendName = '[...]';

// We choose a frontend (for example 'Core', 'Output', 'Page'...)
$frontendName = '[...]';

// We set an array of options for the chosen frontend
$frontendOptions = array([...]);

// We set an array of options for the chosen backend
$backendOptions = array([...]);

// We create an instance of Zend_Cache
// (of course, the two last arguments are optional)
$cache = Zend_Cache::factory($frontendName,
                             $backendName,
                             $frontendOptions,
                             $backendOptions);

En los siguientes ejemplos asumiremos que la variable $cache contiene un frontend válido e instanciado como se muestra, y que usted entiende cómo pasar parámetros a los backends que elija.

[Note] Nota

Utilice siempre Zend_Cache::factory() para obtener instancias de frontend. Instanciar los frontends y backends usted mismo no funcionará como se espera.

17.2.2. Etiquetado de registros

Las etiquetas (tags) son una forma de categorizar los registros de caché. Cuando guarda una caché con el método save(), puede establecer un array de etiquetas para aplicar a este registro. Después podrá limpiar todos los registros de caché etiquetados con una etiqueta (o etiquetas) determinada:

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

observe que el método save() acepta un cuarto argumento opcional: $specificLifetime (si es distinto de FALSE, establece un tiempo de vida específico para ese registro de caché en particular)

17.2.3. Limpieza de la caché

Para eliminar o invalidar un id de caché en particular, puede usar el método remove():

$cache->remove('idToRemove');

Para eliminar o invalidar varios ids de caché en una sola operación, puede usar el método clean(). Por ejemplo, para eliminar todos los registros de caché:

// clean all records
$cache->clean(Zend_Cache::CLEANING_MODE_ALL);

// clean only outdated
$cache->clean(Zend_Cache::CLEANING_MODE_OLD);

Si desea eliminar las entradas de caché que coincidan con las etiquetas 'tagA' y 'tagC':

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

Si desea eliminar las entradas de caché que no coincidan con las etiquetas 'tagA' o 'tagC':

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

Si desea eliminar las entradas de caché que coincidan con las etiquetas 'tagA' o 'tagC':

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

Los modos de limpieza disponibles son: CLEANING_MODE_ALL, CLEANING_MODE_OLD, CLEANING_MODE_MATCHING_TAG, CLEANING_MODE_NOT_MATCHING_TAG y CLEANING_MODE_MATCHING_ANY_TAG. Estos últimos, como sus nombres sugieren, se combinan con un array de etiquetas en las operaciones de limpieza.