4.2. La th�orie du cache

Il y a trois concepts cl�s dans Zend_Cache. Le premier est l'identifiant unique (une cha�ne) qui est utilis� pour identifier les enregistrements de cache. Le seconde est la directive 'lifeTime' vue dans les exemples; elle d�finie combien de temps la ressource de cache est consid�r� comme � jour. Le troisi�me est l'ex�cution conditionnelle, ainsi chaque partie de votre code peut �tre pass�e enti�rement, pour am�liorer les performances. Le fonction principale du frontend (Zend_Cache_Core::get()) est toujours faite pour retourner false en cas de cache manquant, si cela donne du sens pour la nature d'un frontend. Cela permet aux utiliseurs d'entourer des parties de code qu'ils veulent mettre en cache (and passer) dans une instruction if(){ ... } ou la condition est une m�thode Zend_Cache. A la fin de ces blocs, vous devez sauvegarder ce que vous avez g�n�r� (eg. Zend_Cache_Core::save()).

[Note] Note

Le design de l'ex�cution conditionelle de votre code g�n�r� n'est pas forc�ment dans des frontends. (Function, par exemple) quand toute la logique est impl�ment�e � l'int�rieur du frontend.

[Note] Note

Le 'Cache hit' est un terme pour une condition quand l'enregistremetn de cache est trouv�, valide, et � jour (en d'autres mots, qu'il n'a pas encore expir�). Le 'Cache miss' est tout le reste. Lorsque un 'Cache miss' survient, vous devez g�n�rer vos donn�es (comme vous le feriez normallement) et le mettre en cache. Lorsque vous avez un 'Cache hit', le backend r�cup�re pour vous et de fa�on transparente, les enregistrements.

4.2.1. La m�thode de fabrique de Zend_Cache

Une bonne mani�re de construire une instance utilisable d'un frontend Zend_Cache est donn�e dans l'exemple suivant:

<?php

# Nous chargeons la fabrique Zend_Cache
require 'Zend/Cache.php';

# Nous choisissons un backend (par exemple 'File' ou 'Sqlite')
$backendName = '[...]';

# Nous choisissons un frontend (par exemple: 'Core', 'Output', 'Page'...)
$frontendName = '[...]';

# Nous d�finissons un tableau d'options pour le frontend choisit
$frontendOptions = array([...]);

# Nous d�finisson un tableau d'options pour le banckend choisit
$backendOptions = array([...]);

# Nous cr�ons la bonne instance
# Bien sur, les deux derniers arguments sont optionnels
$cache = Zend_Cache::factory($frontendName, $backendName, $frontendOptions, $backendOptions);

?>

Dans les exemples suivants, nous nous assurerons que la variable $cache utilise un frontend valide, et que vous comprenez comment passer des param�tres � vos backends.

[Note] Note

Utilisez toujours Zend_Cache::factory() pour obtenir des instances de frontend. Instancier des frontend et des backends ne fonctionnera pas comme pr�vu.

4.2.2. Marquer les enregistrements

Les balises sont un moyen de categoriser les enregistrements de cache. Quand vous sauvegardez un cache avec la m�thode save() vous pouvez d�finir un tableau de balises qui s'appliqueront pour cette enregistrement. Ensuite vous serez en mesure de nettoyer tous les enregistrement de cache identifi�s par une balise (ou des balises) donn�es:

<?php

$cache->save($large_donnees, 'monIDUnique', array('tagA', 'tagB', 'tagC'));

?>

4.2.3. Nettoyer le cache

Pour supprimer/invalider un identifiant de cache particulier, vous pouvez utiliser la m�thode remove() :

<?php

$cache->remove('idAEffacer');

?>

Pour efface/invalider plusieurs identifiants de caches en une seule op�ration, vous pouvez utiliser la m�thode clean() Par exemple, pour supprimer tous les caches :

<?php
// nettoie tous les enregistrements
$cache->clean(Zend_Cache::CLEANING_MODE_ALL);

// nettoie uniquement les caches obsol�tes
$cache->clean(Zend_Cache::CLEANING_MODE_OLD);

?>       

Si vous voulez effacer les caches correspondant aux balises 'tagA' et 'tagC':

<?php

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

?>       

Les modes disponibles de nettoyage sont CLEANING_MODE_ALL, CLEANING_MODE_OLD, CLEANING_MODE_MATCHING_TAG et CLEANING_MODE_NOT_MATCHING_TAG. Ils sont � combiner avec un tableau de balises utilis�es pour les op�rations de nettoyage