Zend_Cache-Introduction.xml 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15962 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.cache.introduction">
  5. <title>Introducción</title>
  6. <para>
  7. <classname>Zend_Cache</classname>
  8. provee una forma genérica para cualquier caché de datos.
  9. </para>
  10. <para>
  11. El almacenamiento en caché en Zend Framework se opera por
  12. interfaces, mientras que los registros de caché son almacenados
  13. a través de adapatadores del backend (
  14. <emphasis>Archivo</emphasis>
  15. ,
  16. <emphasis>Sqlite</emphasis>
  17. ,
  18. <emphasis>Memcache</emphasis>
  19. ...) mediante un sistema flexible de documentos de identidad y
  20. etiquetas. Utilizando éstas, es fácil en el futuro eliminar
  21. determinados tipos de registro.(Ejemplo: "eliminar todos los
  22. registros caché de determinada etiqueta").
  23. </para>
  24. <para>
  25. El módulo principal (<classname>Zend_Cache_Core</classname>)
  26. es genérico, flexible y configurable. Aun para sus necesidades
  27. específicas existen frontends de caché que extienden
  28. <classname>Zend_Cache_Core</classname>
  29. a conveniencia:
  30. <emphasis>Output</emphasis>
  31. ,
  32. <emphasis>File</emphasis>
  33. ,
  34. <emphasis>Function</emphasis>
  35. y
  36. <emphasis>Class</emphasis>
  37. .
  38. </para>
  39. <example id="zend.cache.introduction.example-1">
  40. <title>
  41. Obtener un frontend con
  42. Zend_Cache::factory()
  43. </title>
  44. <para>
  45. <methodname>Zend_Cache::factory()</methodname>
  46. ejemplifica objetos correctos y los une. En este primer
  47. ejemplo, usaremos el frontend
  48. <methodname>Core</methodname>
  49. junto con el backend
  50. <emphasis>File</emphasis>
  51. .
  52. </para>
  53. <programlisting language="php"><![CDATA[
  54. $frontendOptions = array(
  55. 'lifetime' => 7200, // tiempo de vida de caché de 2 horas
  56. 'automatic_serialization' => true
  57. );
  58. $backendOptions = array(
  59. 'cache_dir' => './tmp/' // Carpeta donde alojar los archivos de caché
  60. );
  61. // getting a Zend_Cache_Core object
  62. $cache = Zend_Cache::factory('Core',
  63. 'File',
  64. $frontendOptions,
  65. $backendOptions);
  66. ]]></programlisting>
  67. </example>
  68. <note>
  69. <title>
  70. Frontends y Backends Compuestos de Múltiples Palabras
  71. </title>
  72. <para>
  73. Algunos frontends y backends se nombran usando varias
  74. palabras, tal como 'ZenPlatform'. Al fabricarlas las
  75. especificamos, las separamos usando un separador de
  76. palabras, como un espacio (' '), guión ('-'), o punto ('.').
  77. </para>
  78. </note>
  79. <example id="zend.cache.introduction.example-2">
  80. <title>Almacenando en caché un resultado de consulta a una base de datos</title>
  81. <para>
  82. Ahora que tenemos un frontend, podemos almacenar en caché
  83. cualquier tipo de dato (hemos activado la serialización). Por
  84. ejemplo, podemos almacenar en caché un resultado de una
  85. consulta de base de datos muy costosa. Después de ser
  86. almacenada en caché, no es necesario ni conectar la base
  87. de datos; los registros se obtienen del caché de forma no
  88. serializada.
  89. </para>
  90. <programlisting language="php"><![CDATA[
  91. // $cache initializada en el ejemplo anterior
  92. // Verificar si la cahce existe:
  93. if(!$result = $cache->load('myresult')) {
  94. // no existe cache; conectar a la base de datos
  95. $db = Zend_Db::factory( [...] );
  96. $result = $db->fetchAll('SELECT * FROM huge_table');
  97. $cache->save($result, 'myresult');
  98. } else {
  99. // cache existosa!, darlo a conocer
  100. echo "Éste es de caché!\n\n";
  101. }
  102. print_r($result);
  103. ]]></programlisting>
  104. </example>
  105. <example id="zend.cache.introduction.example-3">
  106. <title>
  107. El almacenamiento en caché de salida con la interfaz de
  108. salida
  109. Zend_Cache
  110. </title>
  111. <para>
  112. ‘Resaltamos’ las secciones en las que deseamos almacenar en
  113. caché la salida, mediante la adición de algunas condiciones lógicas,
  114. encapsulamos la sección dentro de los métodos
  115. <methodname>start()</methodname>
  116. y
  117. <methodname>end()</methodname>
  118. (esto se parece al primer ejemplo y es la estrategia
  119. fundamental para el almacenamiento en caché).
  120. </para>
  121. <para>
  122. Dentro, los datos de salida, como siempre – todas las salidas
  123. serán almacenadas en caché cuando se ordene la ejecución del
  124. método
  125. <methodname>end()</methodname>
  126. . En la siguiente ejecución, toda la sección se saltará a
  127. favor de la búsqueda de datos del caché (tanto tiempo como
  128. el registro del caché sea válido).
  129. </para>
  130. <programlisting language="php"><![CDATA[
  131. $frontendOptions = array(
  132. 'lifetime' => 30, // tiempo de vida de caché de 30 segundos
  133. 'automatic_serialization' => false // éste es el valor por defecto
  134. );
  135. $backendOptions = array('cache_dir' => './tmp/');
  136. $cache = Zend_Cache::factory('Output',
  137. 'File',
  138. $frontendOptions,
  139. $backendOptions);
  140. // Pasamos un identificador único al método start()
  141. if(!$cache->start('mypage')) {
  142. // salida como de costumbre:
  143. echo 'Hola mundo! ';
  144. echo 'Esto está en caché ('.time().') ';
  145. $cache->end(); // la salida es guardada y enviada al navegador
  146. }
  147. echo 'Esto no estará en caché nunca ('.time().').';
  148. ]]></programlisting>
  149. <para>
  150. Note que delineamos el resultado de
  151. <methodname>time()</methodname>
  152. dos veces; esto es algo dinámico para los propósitos de la
  153. demostración. Trate de ejecutarlo y entonces regenérelo
  154. muchas veces; notará que el primer número no cambia mientras
  155. que el segundo cambia a medida que pasa el tiempo. Esto
  156. es porque el primer número esta delineado en la sección
  157. caché y esta guardado en medio de otras salidas. Después de
  158. medio minuto (habremos establecido el tiempo de vida de 30
  159. segundos) los números deben acoplarse nuevamente porque el
  160. registro caché ha expirado -- sólo para ser almacenado en
  161. caché nuevamente. Deberá probarlo en su visualizador o
  162. consola.
  163. </para>
  164. </example>
  165. <note>
  166. <para>
  167. Cuando usamos <classname>Zend_Cache</classname>, ponemos atención a la importación
  168. del identificador caché (pasado a
  169. <methodname>save()</methodname>
  170. y
  171. <methodname>start()</methodname>
  172. ). Éste deberá ser único para cada recurso que se almacene
  173. en caché, de otra manera los registros almacenados en caché
  174. que no se vinculan podrían borrarse unos a otros, o peor
  175. aún, mostrarse uno en lugar del otro.
  176. </para>
  177. </note>
  178. </sect1>
  179. <!--
  180. vim:se ts=4 sw=4 et:
  181. -->