2
0

Zend_Cache-Introduction.xml 7.0 KB

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