[ZF-10089] Zend_Log
[zend.git] / documentation / manual / es / module_specs / Zend_Cache-Introduction.xml
blob6953ebf75ba241e37019f11321994e14ca9e4468
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>
31         <programlisting language="php"><![CDATA[
32 $frontendOptions = array(
33    'lifetime' => 7200, // tiempo de vida de caché de 2 horas
34    'automatic_serialization' => true
37 $backendOptions = array(
38     'cache_dir' => './tmp/' // Carpeta donde alojar los archivos de caché
41 // getting a Zend_Cache_Core object
42 $cache = Zend_Cache::factory('Core',
43                              'File',
44                              $frontendOptions,
45                              $backendOptions);
46 ]]></programlisting>
47     </example>
49     <note>
50         <title> Frontends y Backends Compuestos de Múltiples Palabras </title>
51         <para> Algunos frontends y backends se nombran usando varias palabras,
52             tal como 'ZenPlatform'. Al fabricarlas las especificamos, las
53             separamos usando un separador de palabras, como un espacio (' '),
54             guión ('-'), o punto ('.'). </para>
55     </note>
57     <example id="zend.cache.introduction.example-2">
58         <title>Almacenando en caché un resultado de consulta a una base de
59             datos</title>
61         <para> Ahora que tenemos un frontend, podemos almacenar en caché
62             cualquier tipo de dato (hemos activado la serialización). Por
63             ejemplo, podemos almacenar en caché un resultado de una consulta de
64             base de datos muy costosa. Después de ser almacenada en caché, no es
65             necesario ni conectar la base de datos; los registros se obtienen
66             del caché de forma no serializada. </para>
68         <programlisting language="php"><![CDATA[
69 // $cache initializada en el ejemplo anterior
71 // Verificar si la cahce existe:
72 if(!$result = $cache->load('myresult')) {
74     // no existe cache; conectar a la base de datos
76     $db = Zend_Db::factory( [...] );
78     $result = $db->fetchAll('SELECT * FROM huge_table');
80     $cache->save($result, 'myresult');
82 } else {
84     // cache existosa!, darlo a conocer
85     echo "Éste es de caché!\n\n";
89 print_r($result);
90 ]]></programlisting>
91     </example>
93     <example id="zend.cache.introduction.example-3">
94         <title> El almacenamiento en caché de salida con la interfaz de salida
95             Zend_Cache </title>
96         <para> 'Resaltamos' las secciones en las que deseamos almacenar en caché
97             la salida, mediante la adición de algunas condiciones lógicas,
98             encapsulamos la sección dentro de los métodos
99                 <methodname>start()</methodname> y
100                 <methodname>end()</methodname> (esto se parece al primer ejemplo
101             y es la estrategia fundamental para el almacenamiento en caché). </para>
102         <para> Dentro, los datos de salida, como siempre – todas las salidas
103             serán almacenadas en caché cuando se ordene la ejecución del método
104                 <methodname>end()</methodname> . En la siguiente ejecución, toda
105             la sección se saltará a favor de la búsqueda de datos del caché
106             (tanto tiempo como el registro del caché sea válido). </para>
107         <programlisting language="php"><![CDATA[
108 $frontendOptions = array(
109    'lifetime' => 30,                   // tiempo de vida de caché de 30 segundos
110    'automatic_serialization' => false  // éste es el valor por defecto
113 $backendOptions = array('cache_dir' => './tmp/');
115 $cache = Zend_Cache::factory('Output',
116                              'File',
117                              $frontendOptions,
118                              $backendOptions);
120 // Pasamos un identificador único al método start()
121 if(!$cache->start('mypage')) {
122     // salida como de costumbre:
124     echo 'Hola mundo! ';
125     echo 'Esto está en caché ('.time().') ';
127     $cache->end(); // la salida es guardada y enviada al navegador
130 echo 'Esto no estará en caché nunca ('.time().').';
131 ]]></programlisting>
132         <para> Note que delineamos el resultado de
133                 <methodname>time()</methodname> dos veces; esto es algo dinámico
134             para los propósitos de la demostración. Trate de ejecutarlo y
135             entonces regenérelo muchas veces; notará que el primer número no
136             cambia mientras que el segundo cambia a medida que pasa el tiempo.
137             Esto es porque el primer número esta delineado en la sección caché y
138             esta guardado en medio de otras salidas. Después de medio minuto
139             (habremos establecido el tiempo de vida de 30 segundos) los números
140             deben acoplarse nuevamente porque el registro caché ha expirado --
141             sólo para ser almacenado en caché nuevamente. Deberá probarlo en su
142             visualizador o consola. </para>
143     </example>
144     <note>
145         <para> Cuando usamos <classname>Zend_Cache</classname> , ponemos
146             atención a la importación del identificador caché (pasado a
147                 <methodname>save()</methodname> y
148                 <methodname>start()</methodname> ). Éste deberá ser único para
149             cada recurso que se almacene en caché, de otra manera los registros
150             almacenados en caché que no se vinculan podrían borrarse unos a
151             otros, o peor aún, mostrarse uno en lugar del otro. </para>
152     </note>
153 </sect1>