Table des matières
Zend_Cache founit un moyen g�n�rique des mettre en cache des donn�es.
Le cache dans le Framework Zend op�re via frontends alors que les caches d'enregistrements sont stock�s
gr�ce � des adapteurs de backend (File, Sqlite, Memcache...)
� travers un syst�me souple d'IDs et de balises. En les utilisant, il est simple de supprimer des
types sp�cifiques d'enregistrements par la suite (par exemple: "supprime tous les enregistrement de
cache marqu� avec une balise donn�e")
Le coeur du module (Zend_Cache_Core) est g�n�rique, souple et configurable.
Pour le moment, pour vos besoins sp�cifiques, il y a des frontends qui �tendent Zend_Cache_Core.
pour votre confort : Output, File, Function and Class.
Exemple 4.1. Cr�er un frontend avec Zend_Cache::factory()
Zend_Cache::factory() instancie les objets corrects et les lie ensemble.
Dans le premier exemple, nous allons utiliser le frontend Core avec le
backend File
<?php
require_once 'Zend/Cache.php';
$frontendOptions = array(
'lifeTime' => 7200, // temps de vie du cache de 2 heures
'automaticSerialization' => true
);
$backendOptions = array(
'cacheDir' => './tmp/' // R�pertoire o� stocker les fichiers de cache
);
// cr�er un objet Zend_Cache_Code
$cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
?>
Maintenant que nous avons un frontend, nous pouvons mettre en cache tout type de donn�es. Nous avons activ� la serialisation. Par exemple nous pouvons mettre en cache le r�sultat d'une requ�te SQL couteuse. Apr�s qu'il soit mis en cache, il n'y a plus besoin de se connecter � la base de donn�es. Les enregistrement r�cup�r� depuis le cache sont d�s�rialis�s.
<?php
// $cache initialis� dans l'exemple pr�c�dent
// on regarde si un cache existe d�j�
if(!$result = $cache->get('myresult')) {
// le cache est manquant, connexion � la base de donn�es
$db = Zend_Db::factory( [...] );
$result = $db->fetchAll('SELECT * FROM grosse_table');
$cache->save($result, 'myresult');
} else {
// il y a un cache
echo "This one is from cache!\n\n";
}
print_r($result);
?>
Exemple 4.2. Cache de sortie avec le frontend de sortie Zend_Cache
Nous marquons les sections dans lesquelles nous voulons une cache de sortie en ajoutant
de la logique conditionnelle, en encapsulant la section entre les m�thodes
start() et end() (cela ressemble au premier exemple
et est la core strategy de pour la mise en cache)
A l'int�reieur, affichez vous donn�es comme d'habitude toutes les sorties seront misent en cache
quans la m�thode end() est appel�e.
A la prochaine ex�cution, la section compl�te sera pass�e, au profit de la r�cup�ration de son cache
(si le cache est encore valide).
<?php
$frontendOptions = array(
'lifeTime' => 30, // temps de vue du cache de 30 secondes
'automaticSerialization' => false // par d�faut
);
$backendOptions = array('cacheDir' => './tmp/');
$cache = Zend_Cache::factory('Output', 'File', $frontendOptions, $backendOptions);
// nous passons un identifiant unique � la m�thode start()
if(!$cache->start('mypage')) {
// output as usual:
echo 'Hello world! ';
echo 'Ceci est dy cache('.time().') ';
$cache->end(); // la sortie est sauvegard�e est envoy� au navigateur
}
echo 'Ceci n\' jamais mis en cache ('.time().').';
?>
Notez que nous affichons le r�sultat de time() deux fois; c'est dans un but de
d�monstrations. Essayez de lancer la page est de la rafraichir plusieurs fois; you allez
constater que la premier nombre ne change pas alors que le second change � chaque actualisation.
C'est parce que le premier nombre a �t� mis en cache est sauvegard�.
Apr�s 30 secondes, le nombre devrait de nouveau correspondre au second nombre
parce que le cache a espir� -- seulement pour �tre cach� de nouveau.
Vous devriez essayer �a dans votre navigateur ou dans une console.
![]() |
Note |
|---|---|
Lorsque vous utilisez Zend_Cache, faite attention � l'identifiant du cache (pass� � |