<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 17746 -->
<!-- Reviewed: no -->
<sect1 id="zend.cache.backends">
    <title>Zend_Cache Backends</title>
    <para>
        Es gibt zwei Arten von Backends: Standard und erweiterte. Natürlich bieten erweiterte
        Backends mehr Features.
    </para>

    <sect2 id="zend.cache.backends.file">
        <title>Zend_Cache_Backend_File</title>
        <para>
            Dieses (erweiterte) Backend speichert Cache Datensätze in Dateien (in einem gewählten
            Verzeichnis).
        </para>
        <para>
            Mögliche Optionen sind :
        </para>
        <table id="zend.cache.backends.file.table">
            <title>File Backend Optionen</title>
            <tgroup cols="4">
                 <thead>
                      <row>
                        <entry>Option</entry>
                        <entry>Daten Typ</entry>
                        <entry>Standardwert</entry>
                        <entry>Beschreibung</entry>
                    </row>
                 </thead>
                 <tbody>
                      <row>
                          <entry><emphasis>cache_dir</emphasis></entry>
                          <entry><type>String</type></entry>
                          <entry>'<filename>/tmp/</filename>'</entry>
                          <entry>
                              Verzeichnis, in dem die Cache Dateien gespeichert werden
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>file_locking</emphasis></entry>
                          <entry><type>Boolean</type></entry>
                          <entry><constant>TRUE</constant></entry>
                          <entry>
                            Ein- oder Ausschalten von file_locking: kann die Beschädigung des
                            Caches unter schlechten Bedingungen verhindern, aber es hilft nicht bei
                            Multithreaded Webservern oder bei <acronym>NFS</acronym>
                            Filesystemen...
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>read_control</emphasis></entry>
                          <entry><type>Boolean</type></entry>
                          <entry><constant>TRUE</constant></entry>
                          <entry>
                            Ein- oder Ausschalten von read_control: eingeschaltet wird ein
                            Kontrollschlüssel im Cache File inkludiert und dieser Schlüssel wird mit
                            dem Schlüssel verglichen, der nach dem Lesen berechnet wird.
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>read_control_type</emphasis></entry>
                          <entry><type>String</type></entry>
                          <entry>'crc32'</entry>
                          <entry>
                            Typ der Schreibkontrolle (nur wenn read_control eingeschaltet ist).
                            Mögliche Werte sind : 'md5' (bestes, aber am Langsamsten), 'crc32'
                            (etwas weniger sicher, aber schneller, beste Wahl), 'adler32' (neue
                            Wahl, schneller als crc32), 'strlen' um nur die Länge zu testen
                            (schnellstes).
                        </entry>
                      </row>
                      <row>
                          <entry><emphasis>hashed_directory_level</emphasis></entry>
                          <entry><type>Integer</type></entry>
                          <entry>0</entry>
                          <entry>
                             Level der gehashten Verzeichnis Struktur: 0 heißt "keine gehashte
                             Verzeichnis Strutur, 1 heißt "ein Level von Verzeichnissen", 2 heißt
                             "zwei Levels"... Diese Option kann den Cache nur dann schneller machen,
                             wenn viele Tausende Cache Dateien verwendet werden. Nur spezielle
                             Messungen können helfen, den perfekten Wert zu finden. Möglicherweise
                             ist 1 oder 2 ein guter Anfang.
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>hashed_directory_umask</emphasis></entry>
                          <entry><type>Integer</type></entry>
                          <entry>0700</entry>
                          <entry>
                              Umask für die gehashte Verzeichnis Struktur
                        </entry>
                      </row>
                      <row>
                          <entry><emphasis>file_name_prefix</emphasis></entry>
                          <entry><type>String</type></entry>
                          <entry>'zend_cache'</entry>
                          <entry>
                              Präfix für Cache Dateien; man muss mit dieser Option sehr vorsichtig
                              umgehen, weil ein zu generischer Wert in einem System Cache
                              Verzeichnis (wie <filename>/tmp</filename>) kann beim Löschen des
                              Caches zu großen Problemen führen.
                        </entry>
                      </row>
                      <row>
                          <entry><emphasis>cache_file_umask</emphasis></entry>
                          <entry><type>Integer</type></entry>
                          <entry>0700</entry>
                          <entry>
                              umask nach Cache Dateien
                          </entry>
                      </row>
                       <row>
                          <entry><emphasis>metatadatas_array_max_size</emphasis></entry>
                          <entry><type>Integer</type></entry>
                          <entry>100</entry>
                          <entry>
                              Interne maximale Größe für das Metadaten Array (dieser Wert sollte
                              nicht geändert werden außer man weiß was man macht)
                          </entry>
                      </row>
                  </tbody>
              </tgroup>
          </table>
    </sect2>
    <sect2 id="zend.cache.backends.sqlite">
        <title>Zend_Cache_Backend_Sqlite</title>
        <para>
            Dieses (erweiterte) Backend speichert die Cache Datensätze in einer SQLite Datenbank.
        </para>
        <para>
            Mögliche Optionen sind :
        </para>
        <table id="zend.cache.backends.sqlite.table">
            <title>Sqlite Backend Optionen</title>
            <tgroup cols="4">
                 <thead>
                      <row>
                           <entry>Option</entry>
                        <entry>Daten Typ</entry>
                        <entry>Standardwert</entry>
                        <entry>Beschreibung</entry>
                    </row>
                 </thead>
                 <tbody>
                      <row>
                          <entry><emphasis>cache_db_complete_path (mandatory)</emphasis></entry>
                          <entry><type>String</type></entry>
                          <entry><constant>NULL</constant></entry>
                          <entry>
                              Der komplette Pfad (inklusive Dateiname) der SQLite Datenbank
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>automatic_vacuum_factor</emphasis></entry>
                          <entry><type>Integer</type></entry>
                          <entry>10</entry>
                          <entry>
                              Deaktiviert oder stellt den automatischen Vakuumprozess ein.
                              Der automatische Vakuumprozess defragmentiert die Datenbankdatei (und
                              verkleinert sie) wenn <methodname>clean()</methodname> oder
                              <methodname>delete()</methodname> aufgerufen wird: 0 bedeutet kein
                              automatisches Vakuum; 1 bedeutet systematisches Vakuum (wenn die
                              <methodname>delete()</methodname> or <methodname>clean()</methodname>
                              Methoden aufgerufen werden; x (integer) > 1 => automatisches Vakuum
                              zufällig einmal pro x <methodname>clean()</methodname> oder
                              <methodname>delete()</methodname> Aufrufe.
                          </entry>
                      </row>
                  </tbody>
              </tgroup>
          </table>
    </sect2>
    <sect2 id="zend.cache.backends.memcached">
        <title>Zend_Cache_Backend_Memcached</title>
        <para>
            Dieses (erweiterte) Backend speichert Cache Datensätze in einem Memcached Server. <ulink
                url="http://www.danga.com/memcached/">memcached</ulink> ist ein hoch-performantes,
            verteiltes Speicher Objekt Caching System. Um dieses Backend zu benutzen, wird ein
            Memcached Dämon benötigt und <ulink url="http://pecl.php.net/package/memcache">die
                Memcached <acronym>PECL</acronym> Erweiterung</ulink>.
        </para>
        <para>
            Vorsicht: mit diesem Backend werden zur Zeit "Marker" nicht unterstützt genauso wie das
            "doNotTestCacheValidity=true" Argument.
        </para>
        <para>
            Mögliche Optionen sind :
        </para>
        <table id="zend.cache.backends.memcached.table">
            <title>Memcached Backend Optionen</title>
            <tgroup cols="4">
                 <thead>
                      <row>
                        <entry>Option</entry>
                        <entry>Daten Typ</entry>
                        <entry>Standardwert</entry>
                        <entry>Beschreibung</entry>
                    </row>
                 </thead>
                 <tbody>
                      <row>
                          <entry><emphasis>servers</emphasis></entry>
                          <entry><type>Array</type></entry>
                          <entry>
                              <command>array(array('host' => 'localhost','port' => 11211,
                                  'persistent' => true, 'weight' => 1, 'timeout' => 5,
                                  'retry_interval' => 15, 'status' => true,
                                  'failure_callback' => '' ))</command>
                          </entry>
                          <entry>
                              Ein Array von Memcached Servern; jeder Memcached Server wird durch ein
                              assoziatives Array beschrieben : 'host' => (string) : Der Name des
                              Memcached Servers, 'port' => (int) : Der Port des Memcached Servers,
                              'persistent' => (bool) : Persistente Verbindungen für diesen Memcached
                              Server verwenden oder nicht 'weight' => (int) : Das Gewicht des
                              Memcached Servers, 'timeout' => (int) : Das Timeout des Memcached
                              Servers, 'retry_interval' => (int) : Das Wiederholungsintervall des
                              Memcached Servers, 'status' => (bool) : Der Status des Memcached
                              Servers, 'failure_callback' => (callback) : Der failure_callback des
                              Memcached Servers
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>compression</emphasis></entry>
                          <entry><type>Boolean</type></entry>
                          <entry><constant>FALSE</constant></entry>
                          <entry>
                             <constant>TRUE</constant> wenn on-the-fly Kompression verwendet werden
                             soll
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>compatibility</emphasis></entry>
                          <entry><type>Boolean</type></entry>
                          <entry><constant>FALSE</constant></entry>
                          <entry>
                             <constant>TRUE</constant> wenn man den Compatibility Modus mit alten
                             Memcache Servern oder Erweiterungen verwenden will
                          </entry>
                      </row>
                  </tbody>
              </tgroup>
          </table>
    </sect2>
    <sect2 id="zend.cache.backends.apc">
        <title>Zend_Cache_Backend_Apc</title>
        <para>
            Dieses (erweiterte) Backend speichert Cache Datensätze im Shared Memory durch die
            <ulink url="http://pecl.php.net/package/APC">APC</ulink> (Alternativer
            <acronym>PHP</acronym> Cache) Erweiterung (welche natürlich für die Verwendung dieses
            Backends benötigt wird).
        </para>
        <para>
            Vorsicht: mit diesem Backend werden "Marker" zur Zeit nicht unterstützt genauso wie das
            "doNotTestCacheValidity=true" Argument.
        </para>
        <para>
            Es gibt keine Optionen für dieses Backend.
        </para>
    </sect2>
    <sect2 id="zend.cache.backends.xcache">
        <title>Zend_Cache_Backend_Xcache</title>
        <para>
            Dieses Backend speichert Cache Einträge im Shared Memory durch die
            <ulink url="http://xcache.lighttpd.net/">XCache</ulink> Erweiterung (welche natürlich
            benötigt wird, damit dieses Backend verwendet werden kann).
        </para>
        <para>
            Achtung: Bei diesem Backend werden "tags" aktuell nicht unterstützt sowie das
            "doNotTestCacheValidity=true" Argument.
        </para>
        <para>
            Mögliche Optionen sind:
        </para>
        <table id="zend.cache.backends.xcache.table">
            <title>Xcache backend options</title>
            <tgroup cols="4">
                <thead>
                    <row>
                        <entry>Option</entry>
                        <entry>Daten Typ</entry>
                        <entry>Standardwert</entry>
                        <entry>Beschreibung</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><emphasis>user</emphasis></entry>
                        <entry><type>String</type></entry>
                        <entry><constant>NULL</constant></entry>
                        <entry>
                              <filename>xcache.admin.user</filename>, notwendig für die
                              <methodname>clean()</methodname> Methode
                        </entry>
                    </row>
                    <row>
                        <entry><emphasis>password</emphasis></entry>
                        <entry><type>String</type></entry>
                        <entry><constant>NULL</constant></entry>
                        <entry>
                              <filename>xcache.admin.pass</filename> (in offener Form, nicht
                              <acronym>MD5</acronym>), notwendig für die
                              <methodname>clean()</methodname> Methode
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </sect2>
    <sect2 id="zend.cache.backends.platform">
        <title>Zend_Cache_Backend_ZendPlatform</title>
        <para>
            Dieses Backend verwendet die Content Caching <acronym>API</acronym> des
            <ulink url="http://www.zend.com/en/products/platform">Zend Platform</ulink> Produktes.
            Natürlich muss man die Zend Platform installiert haben, um dieses Backend verwenden zu
            können.
        </para>
        <para>
            Dieses Backend unterstützt Tags, aber nicht den
            <constant>CLEANING_MODE_NOT_MATCHING_TAG</constant> Löschmodus.
        </para>
        <para>
            Bei Definition dieses Backends muß ein Trennzeichen -- '-', '.', ' ', oder '_'
            -- zwischen den Wörtern 'Zend' und 'Platform' definiert sein wenn die
            <methodname>Zend_Cache::factory()</methodname> Methode verwendet wird:
        </para>
        <programlisting language="php"><![CDATA[
$cache = Zend_Cache::factory('Core', 'Zend Platform');
]]></programlisting>
        <para>
            Es gibt keine Optionen für dieses Backend.
        </para>
    </sect2>
    <sect2 id="zend.cache.backends.twolevels">
        <title>Zend_Cache_Backend_TwoLevels</title>
        <para>
            Dieses (erweiterte) Backend ist ein Hybrides. Es speichert Cache Einträge in zwei
            anderen Backends: Ein schnelles (aber limitiertes) wie Apc, Memcache... und ein
            "langsames" wie File, Sqlite...
        </para>
        <para>
            Dieses Backend verwendet den Priority Parameter (der auf Frontend Level angegeben wird
            wenn ein Eintrag gespeichert wird) und den verbleibenden Platz im schnellen Backend um
            die Verwendung dieser zwei Backends zu optimieren.
        </para>
        <para>
            Dieses Backend sollte mit Verwendung eines Word Separators -- '-', '.', ' ', oder '_' --
            zwischen den Wörtern 'Two' und 'Levels' spezifiziert werden wenn die
            <methodname>Zend_Cache::factory()</methodname> Methode verwendet wird:
        </para>
        <programlisting language="php"><![CDATA[
$cache = Zend_Cache::factory('Core', 'Two Levels');
]]></programlisting>
        <para>
            Vorhandene Optionen sind:
        </para>
        <table id="zend.cache.backends.twolevels.table">
            <title>TwoLevels Backend Optionen</title>
            <tgroup cols="4">
                 <thead>
                      <row>
                        <entry>Option</entry>
                        <entry>Datentyp</entry>
                        <entry>Standardwert</entry>
                        <entry>Beschreibung</entry>
                    </row>
                 </thead>
                 <tbody>
                      <row>
                          <entry><emphasis>slow_backend</emphasis></entry>
                          <entry><type>String</type></entry>
                          <entry>File</entry>
                          <entry>
                              Der "langsame" Backendname
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>fast_backend</emphasis></entry>
                          <entry><type>String</type></entry>
                          <entry>Apc</entry>
                          <entry>
                              Der "schnelle" Backendname
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>slow_backend_options</emphasis></entry>
                          <entry><type>Array</type></entry>
                          <entry><methodname>array()</methodname></entry>
                          <entry>
                              Die "langsamen" Backendoptionen
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>fast_backend_options</emphasis></entry>
                          <entry><type>Array</type></entry>
                          <entry><methodname>array()</methodname></entry>
                          <entry>
                              Die "schnellen" Backendoptionen
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>slow_backend_custom_naming</emphasis></entry>
                          <entry><type>Boolean</type></entry>
                          <entry><constant>FALSE</constant></entry>
                          <entry>
                              Wenn <constant>TRUE</constant>, wird das slow_backend Argument als
                              kompletter Klassenname verwendet; wenn <constant>FALSE</constant>,
                              wird das frontend Argument als Ende des
                              "<classname>Zend_Cache_Backend_</classname>[...]" Klassennamens
                              verwendet
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>fast_backend_custom_naming</emphasis></entry>
                          <entry><type>Boolean</type></entry>
                          <entry><constant>FALSE</constant></entry>
                          <entry>
                              Wenn <constant>TRUE</constant>, wird das fast_backend Argument als
                              kompletter Klassenname verwendet; wenn <constant>false</constant>,
                              wird das frontend Argument als Ende des
                              "<classname>Zend_Cache_Backend_</classname>[...]" Klassennamens
                              verwendet
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>slow_backend_autoload</emphasis></entry>
                          <entry><type>Boolean</type></entry>
                          <entry><constant>FALSE</constant></entry>
                          <entry>
                              Wenn <constant>TRUE</constant>, wird kein require_once für das
                              langsame Backend verwendet (nur für eigene Backends nützlich)
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>fast_backend_autoload</emphasis></entry>
                          <entry><type>Boolean</type></entry>
                          <entry><constant>FALSE</constant></entry>
                          <entry>
                              Wenn <constant>TRUE</constant>, wird kein require_once für das
                              schnelle Backend verwendet (nur für eigene Backends nützlich)
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>auto_refresh_fast_cache</emphasis></entry>
                          <entry><type>Boolean</type></entry>
                          <entry><constant>TRUE</constant></entry>
                          <entry>
                              Wenn <constant>TRUE</constant>, wird der schnelle Cache automatisch
                              refresht wenn ein Cache Eintrag getroffen wird
                          </entry>
                      </row>
                      <row>
                          <entry><emphasis>stats_update_factor</emphasis></entry>
                          <entry><type>Integer</type></entry>
                          <entry>10</entry>
                          <entry>
                              Ausschalten / Feintunen der Berechnung des Füll-Prozentsatzes des
                              schnellen Backends (wenn ein Eintrag in den Cache gespeichert wird,
                              die Berechnung des Füll-Prozentsatzes des schnellen Backends zufällig
                              1 mal bei x Cache Schreibvorgängen)
                          </entry>
                      </row>
                  </tbody>
              </tgroup>
          </table>
    </sect2>
    <sect2 id="zend.cache.backends.zendserver">
        <title>Zend_Cache_Backend_ZendServer_Disk und Zend_Cache_Backend_ZendServer_ShMem</title>
        <para>
            Diese Backends speichern Cacheeinträge indem Sie die Caching Funktionalitäten von <ulink
                url="http://www.zend.com/en/products/server/downloads-all?zfs=zf_download">Zend
                Server</ulink> verwenden.
        </para>
        <para>
            Achtung: mit diesen Backends werden für den Moment "Tags" nicht unterstützt, wegen dem
            "doNotTestCacheValidity=true" Argument.
        </para>
        <para>
            Diese Backends arbeiten nur nur in einer Zend Server Umgebung für Seiten die über
            <acronym>HTTP</acronym> oder <acronym>HTTPS</acronym> angefragt wurden und nicht für
            Kommandozeilen Ausführung.
        </para>
        <para>
            Dieses Backend muß durch Verwendung des <emphasis>customBackendNaming</emphasis>
            Parameter mit <constant>TRUE</constant> spezifiziert werden wenn die Methode
            <methodname>Zend_Cache::factory()</methodname> verwendet wird:
        </para>
        <programlisting language="php"><![CDATA[
$cache = Zend_Cache::factory('Core', 'Zend_Cache_Backend_ZendServer_Disk', $frontendOptions,
$backendOptions, false, true);
]]></programlisting>
        <para>
            Es gibt keine Optionen für diese Backends.
        </para>
    </sect2>
</sect1>
<!--
vim:se ts=4 sw=4 et:
+-->