Zend_Cache-Theory.xml 6.6 KB

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