Zend_Cache-Introduction.xml 6.7 KB

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