| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- <?xml version="1.0" encoding="utf-8"?>
- <!-- EN-Revision: 15617 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.cache.theory">
- <title>Aspect théorique</title>
- <para>
- Il y a trois concepts clés dans <classname>Zend_Cache</classname>. Le premier est
- l'identifiant unique (une chaîne) qui est utilisé pour identifier les enregistrements de
- cache. Le second est la directive <code>"lifeTime"</code> vue dans les exemples ; elle
- définit combien de temps la ressource de cache est considérée comme à jour. Le troisième
- est l'exécution conditionnelle, ainsi chaque partie de votre code peut être évitée
- entièrement, pour améliorer les performances. La fonction principale du frontend
- (<classname>Zend_Cache_Core::get()</classname>) est toujours faite pour retourner
- <code>false</code> en cas de cache manquant, si cela donne du sens à la nature d'un
- frontend. Cela permet aux utilisateurs d'entourer des parties de code qu'ils veulent mettre
- en cache (et éviter) dans une instruction <code>if(){ ... }</code> où la condition est une
- méthode <classname>Zend_Cache</classname>. A la fin de ces blocs, vous devez sauvegarder ce
- que vous avez généré (par exemple <classname>Zend_Cache_Core::save()</classname>).
- </para>
- <note>
- <para>
- Le design de l'exécution conditionnelle de votre code généré n'est pas forcément
- dans des frontends (<code>Function</code>, par exemple) quand toute la logique est
- implémentée à l'intérieur du frontend.
- </para>
- </note>
- <note>
- <para>
- Le "Cache hit" est un terme pour une condition quand l'enregistrement 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 normalement) et les mettre en cache. Lorsque vous
- avez un "Cache hit", le backend récupère pour vous et de façon transparente, les
- enregistrements.
- </para>
- </note>
- <sect2 id="zend.cache.factory">
- <title>La méthode de fabrique de Zend_Cache</title>
- <para>
- Une bonne manière de construire une instance utilisable d'un frontend
- <classname>Zend_Cache</classname> est donnée dans l'exemple suivant :
- </para>
- <programlisting language="php"><![CDATA[
- // 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éfinissons 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);
- ]]></programlisting>
- <para>
- Dans les exemples suivants, nous nous assurerons que la variable
- <code>$cache</code> utilise une instance de frontend valide, et que vous
- comprenez comment passer des paramètres à vos backends.
- </para>
- <note>
- <para>
- Utilisez toujours <classname>Zend_Cache::factory()</classname> pour obtenir des
- instances de frontend. Instancier des frontends et des backends par vous-même ne
- fonctionnera pas comme prévu.
- </para>
- </note>
- </sect2>
- <sect2 id="zend.cache.tags">
- <title>Baliser les enregistrements</title>
- <para>
- Les balises sont un moyen de catégoriser les enregistrements de cache. Quand vous
- sauvegardez un cache avec la méthode <code>save()</code> vous pouvez définir un tableau
- de balises qui s'appliqueront à cet enregistrement. Ensuite vous serez en mesure de
- nettoyer tous les enregistrements de cache identifiés par une balise (ou plusieurs)
- donnée :
- </para>
- <programlisting language="php"><![CDATA[
- $cache->save($grande_donnees,
- 'monIDUnique',
- array('tagA', 'tagB', 'tagC'));
- ]]></programlisting>
- <note>
- <para>
- Notez que la méthode <code>save()</code> accepte un quatrième paramètre
- optionnel : <code>$specificLifetime</code> (si différent de <code>false</code>, il
- affecte un '<code>lifeTime</code>' spécifique pour cet enregistrement de cache
- particulier).
- </para>
- </note>
- </sect2>
- <sect2 id="zend.cache.clean">
- <title>Nettoyer le cache</title>
- <para>
- Pour supprimer/invalider un identifiant de cache particulier, vous pouvez
- utiliser la méthode <code>remove()</code> :
- </para>
- <programlisting language="php"><![CDATA[
- $cache->remove('idAEffacer');
- ]]></programlisting>
- <para>
- Pour effacer/invalider plusieurs identifiants de caches en une seule opération,
- vous pouvez utiliser la méthode <code>clean()</code>. Par exemple, pour supprimer tous
- les caches :
- </para>
- <programlisting language="php"><![CDATA[
- // nettoie tous les enregistrements
- $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
- // nettoie uniquement les caches obsolètes
- $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
- ]]></programlisting>
- <para>
- Si vous voulez effacer les caches correspondant aux balises "tagA" et "tagC" :
- </para>
- <programlisting language="php"><![CDATA[
- $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,
- array('tagA', 'tagC'));
- ]]></programlisting>
- <para>
- Si vous voulez effacer les caches ne correspondant pas aux balises "tagA" et
- "tagC" :
- </para>
- <programlisting language="php"><![CDATA[
- $cache->clean(Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
- array('tagA', 'tagC'));
- ]]></programlisting>
- <para>
- Si vous voulez effacer les caches correspondant aux balises "tagA" ou "tagC" :
- </para>
- <programlisting language="php"><![CDATA[
- $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
- array('tagA', 'tagC'));
- ]]></programlisting>
- <para>
- Les modes disponibles de nettoyage sont <code>CLEANING_MODE_ALL</code>,
- <code>CLEANING_MODE_OLD</code>, <code>CLEANING_MODE_MATCHING_TAG</code>,
- <code>CLEANING_MODE_NOT_MATCHING_TAG</code> et
- <code>CLEANING_MODE_MATCHING_ANY_TAG</code>. Les derniers, comme leur nom l'indique,
- sont à combiner avec un tableau de balises pour réaliser les opérations de
- nettoyage.
- </para>
- </sect2>
- </sect1>
|