Zend_Cache-Theory.xml 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 16422 -->
  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><para>
  23. Das Design der bedingten Ausführung des erzeugten Codes ist in einigen Frontends nicht
  24. notwendig (<emphasis>Function</emphasis>, zum Beispiel) wenn die komplette Logik im
  25. verwendeten Frontend integriert ist.
  26. </para></note>
  27. <note><para>
  28. 'Cache hit' ist ein Ausdruck für eine Bedingung, wenn ein Cache Datensatz gefunden wurde, er
  29. gültig und 'frisch' ist (in anderen Worten, er ist noch nicht abgelaufen). 'Cache miss' ist
  30. alles andere. Wenn ein 'Cache miss' passiert, müssen die Daten erzeugt werden (wie man es
  31. normalerweise tun würde) und anschließend cachen. Wenn ein 'Cache hit' geschieht muß, auf
  32. der anderen Seite, das Backend automatisch den Datensatz vom Cache transparent holen.
  33. </para></note>
  34. <sect2 id="zend.cache.factory">
  35. <title>Die Zend_Cache Factory Methode</title>
  36. <para>
  37. Ein guter Weg, um eine verwendbare Instanz eines <classname>Zend_Cache</classname>
  38. Frontends zu erstellen, wird im folgenden Beispiel gegeben:
  39. </para>
  40. <programlisting language="php"><![CDATA[
  41. // Wir wählen ein Backend (zum Beispiel 'File' oder 'Sqlite'...)
  42. $backendName = '[...]';
  43. // Wir wählen ein Frontend (zum Beispiel 'Core', 'Output', 'Page'...)
  44. $frontendName = '[...]';
  45. // Wir definieren ein Array von Optionen für das gewählte Frontend
  46. $frontendOptions = array([...]);
  47. // Wir definieren ein Array von Optionen für das gewählte Backend
  48. $backendOptions = array([...]);
  49. // Wir erstellen eine gute Instanz
  50. // (natürlich sind die letzten 2 Argumente optional)
  51. $cache = Zend_Cache::factory($frontendName,
  52. $backendName,
  53. $frontendOptions,
  54. $backendOptions);
  55. ]]></programlisting>
  56. <para>
  57. In den folgenden Beispielen wird angenommen, dass die <varname>$cache</varname> Variable ein
  58. gültiges, initiiertes Frontend wie gezeigt enthält und dass verstanden wird, wie
  59. Parameter an das ausgewählte Backend übergeben werden.
  60. </para>
  61. <note><para>
  62. Immer <methodname>Zend_Cache::factory()</methodname> benutzen, um eine Frontend Instanz zu
  63. bekommen. Das selbstständige Instantiieren von Frontends und Backends funktioniert nicht
  64. so wie erwartet.
  65. </para></note>
  66. </sect2>
  67. <sect2 id="zend.cache.tags">
  68. <title>Markierte Datensätze</title>
  69. <para>
  70. Markierungen sind ein Weg um Cache Datensätze zu kategorisieren. Wenn der Cache mit der
  71. <methodname>save()</methodname> Methode abgespeichert werden soll, kann ein Array mit
  72. Markierungen für diesen Datensatz angelegt werden. Dann besteht die Möglichkeit, alle
  73. markierten Cache Datensätze mit einer bestimmten Markierung (oder Markierungen), zu
  74. löschen:
  75. </para>
  76. <programlisting language="php"><![CDATA[
  77. $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));
  78. ]]></programlisting>
  79. <note><para>
  80. Man beachte, dass die <methodname>save()</methodname> Method einen optionales, viertes
  81. Argument akzeptiert: <varname>$specificLifetime</varname> (wenn !=
  82. <constant>FALSE</constant>, setzt es eine spezifische Laufzeit für diesen speziellen
  83. Cache Eintrag)
  84. </para></note>
  85. </sect2>
  86. <sect2 id="zend.cache.clean">
  87. <title>Löschen des Caches</title>
  88. <para>
  89. Um eine bestimmte Cache ID zu entfernen oder annullieren, kann die
  90. <methodname>remove()</methodname> Methode benutzt werden:
  91. </para>
  92. <programlisting language="php"><![CDATA[
  93. $cache->remove('idToRemove');
  94. ]]></programlisting>
  95. <para>
  96. Um mehrere Cache IDs mit einer Operation zu entfernen oder annulieren, kann die
  97. <methodname>clean()</methodname> Methode benutzt werden. Zum Beispiel um alle Cache
  98. Datensätze zu entfernen :
  99. </para>
  100. <programlisting language="php"><![CDATA[
  101. // Löschen aller Datensätze
  102. $cache->clean(Zend_Cache::CLEANING_MODE_ALL);
  103. // Nur abgelaufene löschen
  104. $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
  105. ]]></programlisting>
  106. <para>
  107. Um Cache Einträge zu löschen, die zu den Tags 'tagA' und 'tagC' entsprechen :
  108. </para>
  109. <programlisting language="php"><![CDATA[
  110. $cache->clean(
  111. Zend_Cache::CLEANING_MODE_MATCHING_TAG,
  112. array('tagA', 'tagC')
  113. );
  114. ]]></programlisting>
  115. <para>
  116. Um Cache Einträge zu löschen die den Tags 'tagA' oder 'tagC' nicht entsprechen:
  117. </para>
  118. <programlisting language="php"><![CDATA[
  119. $cache->clean(
  120. Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
  121. array('tagA', 'tagC')
  122. );
  123. ]]></programlisting>
  124. <para>
  125. Um Cache Einträge zu löschen, die zu den Tags 'tagA' oder 'tagC' entsprechen :
  126. </para>
  127. <programlisting language="php"><![CDATA[
  128. $cache->clean(
  129. Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
  130. array('tagA', 'tagC')
  131. );
  132. ]]></programlisting>
  133. <para>
  134. Mögliche Löschmodi sind: <constant>CLEANING_MODE_ALL</constant>,
  135. <constant>CLEANING_MODE_OLD</constant>,
  136. <constant>CLEANING_MODE_MATCHING_TAG</constant>,
  137. <constant>CLEANING_MODE_NOT_MATCHING_TAG</constant> und
  138. <constant>CLEANING_MODE_MATCHING_ANY_TAG</constant>. Die letzteren sind, wie deren
  139. Namen vermuten lassen, kombiniert mit einem Array von Markierungen für die
  140. Löschoperation.
  141. </para>
  142. </sect2>
  143. </sect1>
  144. <!--
  145. vim:se ts=4 sw=4 et:
  146. -->