Zend_Cache-Theory.xml 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.cache.theory">
  5. <title>Die Theorie des Cachens</title>
  6. <para>
  7. Es gibt 3 Schlüsselkonzepte in <classname>Zend_Cache</classname>. Eines ist die eindeutige
  8. Identifizierung (ein String), die benutzt wird, um Cache Datensätze zu identifizieren. Das
  9. zweite ist die <emphasis>'lifetime'</emphasis> Direktive, wie im Beispiel gezeigt; sie
  10. definiert, wie lange eine gecachte Ressource als 'frisch' betrachtet wird. Das dritte
  11. Konzept ist die bedingte Ausführung, so das Teile des Codes komplett übersprungen werden
  12. können, was die Leistung steigert. Die Haupt-Frontend Funktion (eg.
  13. <methodname>Zend_Cache_Core::get()</methodname>) ist immer so gestaltet, das
  14. <constant>FALSE</constant> zurückgegeben wird, wenn ein Cache fehlt. Aber nur, wenn das für
  15. die Natur des Frontends Sinn macht. Das erlaubt es Endbenutzern, die Teile des Codes, die
  16. gecached (oder übersprungen) werden sollen, in
  17. <emphasis><methodname>if()</methodname>{ ... }</emphasis> Anweisungen zu umhüllen, wobei
  18. die Bedingung die <classname>Zend_Cache</classname> Methode selbst ist. Am Ende der Blöcke
  19. muss das erstellte auf alle Fälle gespeichert werden (z.B.
  20. <methodname>Zend_Cache_Core::save()</methodname>).
  21. </para>
  22. <note>
  23. <para>
  24. Das Design der bedingten Ausführung des erzeugten Codes ist in einigen Frontends nicht
  25. notwendig (<emphasis>Function</emphasis>, zum Beispiel) wenn die komplette Logik im
  26. verwendeten Frontend integriert ist.
  27. </para>
  28. </note>
  29. <note>
  30. <para>
  31. 'Cache hit' ist ein Ausdruck für eine Bedingung, wenn ein Cache Datensatz gefunden
  32. wurde, er gültig und 'frisch' ist (in anderen Worten, er ist noch nicht abgelaufen).
  33. 'Cache miss' ist alles andere. Wenn ein 'Cache miss' passiert, müssen die Daten erzeugt
  34. werden (wie man es normalerweise tun würde) und anschließend cachen. Wenn ein
  35. 'Cache hit' geschieht muß, auf der anderen Seite, das Backend automatisch den Datensatz
  36. vom Cache transparent holen.
  37. </para>
  38. </note>
  39. <sect2 id="zend.cache.factory">
  40. <title>Die Zend_Cache Factory Methode</title>
  41. <para>
  42. Ein guter Weg, um eine verwendbare Instanz eines <classname>Zend_Cache</classname>
  43. Frontends zu erstellen, wird im folgenden Beispiel gegeben:
  44. </para>
  45. <programlisting language="php"><![CDATA[
  46. // Wir wählen ein Backend (zum Beispiel 'File' oder 'Sqlite'...)
  47. $backendName = '[...]';
  48. // Wir wählen ein Frontend (zum Beispiel 'Core', 'Output', 'Page'...)
  49. $frontendName = '[...]';
  50. // Wir definieren ein Array von Optionen für das gewählte Frontend
  51. $frontendOptions = array([...]);
  52. // Wir definieren ein Array von Optionen für das gewählte Backend
  53. $backendOptions = array([...]);
  54. // Wir erstellen eine gute Instanz
  55. // (natürlich sind die letzten 2 Argumente optional)
  56. $cache = Zend_Cache::factory($frontendName,
  57. $backendName,
  58. $frontendOptions,
  59. $backendOptions);
  60. ]]></programlisting>
  61. <para>
  62. In den folgenden Beispielen wird angenommen, dass die <varname>$cache</varname> Variable
  63. ein gültiges, initiiertes Frontend wie gezeigt enthält und dass verstanden wird, wie
  64. Parameter an das ausgewählte Backend übergeben werden.
  65. </para>
  66. <note>
  67. <para>
  68. Immer <methodname>Zend_Cache::factory()</methodname> benutzen, um eine Frontend
  69. Instanz zu bekommen. Das selbstständige Instantiieren von Frontends und Backends
  70. funktioniert nicht so wie erwartet.
  71. </para>
  72. </note>
  73. </sect2>
  74. <sect2 id="zend.cache.tags">
  75. <title>Markierte Datensätze</title>
  76. <para>
  77. Markierungen sind ein Weg um Cache Datensätze zu kategorisieren. Wenn der Cache mit der
  78. <methodname>save()</methodname> Methode abgespeichert werden soll, kann ein Array mit
  79. Markierungen für diesen Datensatz angelegt werden. Dann besteht die Möglichkeit, alle
  80. markierten Cache Datensätze mit einer bestimmten Markierung (oder Markierungen), zu
  81. löschen:
  82. </para>
  83. <programlisting language="php"><![CDATA[
  84. $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));
  85. ]]></programlisting>
  86. <note>
  87. <para>
  88. Man beachte, dass die <methodname>save()</methodname> Method einen optionales,
  89. viertes Argument akzeptiert: <varname>$specificLifetime</varname> (wenn !=
  90. <constant>FALSE</constant>, setzt es eine spezifische Laufzeit für diesen speziellen
  91. Cache Eintrag)
  92. </para>
  93. </note>
  94. </sect2>
  95. <sect2 id="zend.cache.clean">
  96. <title>Löschen des Caches</title>
  97. <para>
  98. Um eine bestimmte Cache ID zu entfernen oder annullieren, kann die
  99. <methodname>remove()</methodname> Methode benutzt werden:
  100. </para>
  101. <programlisting language="php"><![CDATA[
  102. $cache->remove('idToRemove');
  103. ]]></programlisting>
  104. <para>
  105. Um mehrere Cache IDs mit einer Operation zu entfernen oder annulieren, kann die
  106. <methodname>clean()</methodname> Methode benutzt werden. Zum Beispiel um alle Cache
  107. Datensätze zu entfernen :
  108. </para>
  109. <programlisting language="php"><![CDATA[
  110. // Löschen aller Datensätze
  111. $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
  112. // Nur abgelaufene löschen
  113. $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
  114. ]]></programlisting>
  115. <para>
  116. Um Cache Einträge zu löschen, die zu den Tags 'tagA' und 'tagC' entsprechen :
  117. </para>
  118. <programlisting language="php"><![CDATA[
  119. $cache->clean(
  120. Zend_Cache::CLEANING_MODE_MATCHING_TAG,
  121. array('tagA', 'tagC')
  122. );
  123. ]]></programlisting>
  124. <para>
  125. Um Cache Einträge zu löschen die den Tags 'tagA' oder 'tagC' nicht entsprechen:
  126. </para>
  127. <programlisting language="php"><![CDATA[
  128. $cache->clean(
  129. Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
  130. array('tagA', 'tagC')
  131. );
  132. ]]></programlisting>
  133. <para>
  134. Um Cache Einträge zu löschen, die zu den Tags 'tagA' oder 'tagC' entsprechen :
  135. </para>
  136. <programlisting language="php"><![CDATA[
  137. $cache->clean(
  138. Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
  139. array('tagA', 'tagC')
  140. );
  141. ]]></programlisting>
  142. <para>
  143. Mögliche Löschmodi sind: <constant>CLEANING_MODE_ALL</constant>,
  144. <constant>CLEANING_MODE_OLD</constant>,
  145. <constant>CLEANING_MODE_MATCHING_TAG</constant>,
  146. <constant>CLEANING_MODE_NOT_MATCHING_TAG</constant> und
  147. <constant>CLEANING_MODE_MATCHING_ANY_TAG</constant>. Die letzteren sind, wie deren
  148. Namen vermuten lassen, kombiniert mit einem Array von Markierungen für die
  149. Löschoperation.
  150. </para>
  151. </sect2>
  152. </sect1>