Zend_Cache-Theory.xml 6.7 KB

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