Zend_Cache-Theory.xml 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.cache.theory">
  5. <title>Aspect théorique</title>
  6. <para>
  7. Il y a trois concepts clés dans <classname>Zend_Cache</classname>. Le premier est
  8. l'identifiant unique (une chaîne) qui est utilisé pour identifier les enregistrements de
  9. cache. Le second est la directive <emphasis>"lifeTime"</emphasis> vue dans les
  10. exemples&#160;; elle définit combien de temps la ressource de cache est considérée comme à
  11. jour. Le troisième est l'exécution conditionnelle, ainsi chaque partie de votre code peut
  12. être évitée entièrement, pour améliorer les performances. La fonction principale du
  13. frontend (<methodname>Zend_Cache_Core::get()</methodname>) est toujours faite pour retourner
  14. <constant>FALSE</constant> en cas de cache manquant, si cela donne du sens à la nature d'un
  15. frontend. Cela permet aux utilisateurs d'entourer des parties de code qu'ils veulent mettre
  16. en cache (et éviter) dans une instruction
  17. <emphasis><methodname>if()</methodname>{ ... }</emphasis> où la condition est une
  18. méthode <classname>Zend_Cache</classname>. A la fin de ces blocs, vous devez sauvegarder ce
  19. que vous avez généré (par exemple <methodname>Zend_Cache_Core::save()</methodname>).
  20. </para>
  21. <note>
  22. <para>
  23. Le design de l'exécution conditionnelle de votre code généré n'est pas forcément
  24. dans des frontends (<emphasis>Function</emphasis>, par exemple) quand toute la logique
  25. est implémentée à l'intérieur du frontend.
  26. </para>
  27. </note>
  28. <note>
  29. <para>
  30. Le "Cache hit" est un terme pour une condition quand l'enregistrement de cache
  31. est trouvé, valide, et à jour (en d'autres mots, qu'il n'a pas encore expiré). Le
  32. "Cache miss" est tout le reste. Lorsque un "Cache miss" survient, vous devez générer
  33. vos données (comme vous le feriez normalement) et les mettre en cache. Lorsque vous
  34. avez un "Cache hit", le backend récupère pour vous et de façon transparente, les
  35. enregistrements.
  36. </para>
  37. </note>
  38. <sect2 id="zend.cache.factory">
  39. <title>La méthode de fabrique de Zend_Cache</title>
  40. <para>
  41. Une bonne manière de construire une instance utilisable d'un frontend
  42. <classname>Zend_Cache</classname> est donnée dans l'exemple suivant&#160;:
  43. </para>
  44. <programlisting language="php"><![CDATA[
  45. // Nous choisissons un backend (par exemple 'File' ou 'Sqlite')
  46. $backendName = '[...]';
  47. // Nous choisissons un frontend (par exemple: 'Core', 'Output',
  48. // 'Page'...)
  49. $frontendName = '[...]';
  50. // Nous définissons un tableau d'options pour le frontend choisit
  51. $frontendOptions = array([...]);
  52. // Nous définissons un tableau d'options pour le banckend choisit
  53. $backendOptions = array([...]);
  54. // Nous créons la bonne instance
  55. // Bien sur, les deux derniers arguments sont optionnels
  56. $cache = Zend_Cache::factory($frontendName,
  57. $backendName,
  58. $frontendOptions,
  59. $backendOptions);
  60. ]]></programlisting>
  61. <para>
  62. Dans les exemples suivants, nous nous assurerons que la variable
  63. <varname>$cache</varname> utilise une instance de frontend valide, et que vous
  64. comprenez comment passer des paramètres à vos backends.
  65. </para>
  66. <note>
  67. <para>
  68. Utilisez toujours <methodname>Zend_Cache::factory()</methodname> pour obtenir des
  69. instances de frontend. Instancier des frontends et des backends par vous-même ne
  70. fonctionnera pas comme prévu.
  71. </para>
  72. </note>
  73. </sect2>
  74. <sect2 id="zend.cache.tags">
  75. <title>Baliser les enregistrements</title>
  76. <para>
  77. Les balises sont un moyen de catégoriser les enregistrements de cache. Quand vous
  78. sauvegardez un cache avec la méthode <methodname>save()</methodname> vous pouvez
  79. définir un tableau de balises qui s'appliqueront à cet enregistrement. Ensuite vous
  80. serez en mesure de nettoyer tous les enregistrements de cache identifiés par
  81. une balise (ou plusieurs) donnée&#160;:
  82. </para>
  83. <programlisting language="php"><![CDATA[
  84. $cache->save($grande_donnees,
  85. 'monIDUnique',
  86. array('tagA', 'tagB', 'tagC'));
  87. ]]></programlisting>
  88. <note>
  89. <para>
  90. Notez que la méthode <methodname>save()</methodname> accepte un quatrième paramètre
  91. optionnel : <varname>$specificLifetime</varname> (si différent de
  92. <constant>FALSE</constant>, il affecte un "lifeTime" spécifique pour
  93. cet enregistrement de cache particulier).
  94. </para>
  95. </note>
  96. </sect2>
  97. <sect2 id="zend.cache.clean">
  98. <title>Nettoyer le cache</title>
  99. <para>
  100. Pour supprimer&#160;/&#160;invalider un identifiant de cache particulier, vous pouvez
  101. utiliser la méthode <methodname>remove()</methodname>&#160;:
  102. </para>
  103. <programlisting language="php"><![CDATA[
  104. $cache->remove('idAEffacer');
  105. ]]></programlisting>
  106. <para>
  107. Pour effacer&#160;/&#160;invalider plusieurs identifiants de caches en une seule
  108. opération, vous pouvez utiliser la méthode <methodname>clean()</methodname>. Par
  109. exemple, pour supprimer tous les caches&#160;:
  110. </para>
  111. <programlisting language="php"><![CDATA[
  112. // nettoie tous les enregistrements
  113. $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
  114. // nettoie uniquement les caches obsolètes
  115. $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
  116. ]]></programlisting>
  117. <para>
  118. Si vous voulez effacer les caches correspondant aux balises "tagA" et "tagC"&#160;:
  119. </para>
  120. <programlisting language="php"><![CDATA[
  121. $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,
  122. array('tagA', 'tagC'));
  123. ]]></programlisting>
  124. <para>
  125. Si vous voulez effacer les caches ne correspondant pas aux balises "tagA" et
  126. "tagC"&#160;:
  127. </para>
  128. <programlisting language="php"><![CDATA[
  129. $cache->clean(Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
  130. array('tagA', 'tagC'));
  131. ]]></programlisting>
  132. <para>
  133. Si vous voulez effacer les caches correspondant aux balises "tagA" ou "tagC"&#160;:
  134. </para>
  135. <programlisting language="php"><![CDATA[
  136. $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
  137. array('tagA', 'tagC'));
  138. ]]></programlisting>
  139. <para>
  140. Les modes disponibles de nettoyage sont <constant>CLEANING_MODE_ALL</constant>,
  141. <constant>CLEANING_MODE_OLD</constant>, <constant>CLEANING_MODE_MATCHING_TAG</constant>,
  142. <constant>CLEANING_MODE_NOT_MATCHING_TAG</constant> et
  143. <constant>CLEANING_MODE_MATCHING_ANY_TAG</constant>. Les derniers, comme leur nom
  144. l'indique, sont à combiner avec un tableau de balises pour réaliser les opérations de
  145. nettoyage.
  146. </para>
  147. </sect2>
  148. </sect1>