Zend_Cache-Introduction.xml 7.4 KB

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