2.2. Die Theorie des Cachens
Zurück | Kapitel 2. Zend_Cache | Weiter

## 2.2. Die Theorie des Cachens

Es gibt 3 Schlüssel Konzepte in Zend_Cache. Eines ist die eindeutige Identifizierung (ein String) die benutzt wird, um Cache Datensätze zu identifizieren. Das zweite ist die `'lifeTime'` Direktive, wie im Beispiel gezeigt; Sie definiert wie lange eine gecachte Ressource als 'frisch' betrachtet wird. Das dritte Konzept ist die bedingte Ausführung, so das Teile des Codes komplett übersprungen werden können, was die Leistung steigert. Die Haupt-Frontend Funktion (eg. `Zend_Cache_Core::get()`) ist immer so gestaltet, das false zurückgegeben wird, wenn ein Cache fehlt. Aber nur wenn das für die Natur des Frontends Sinn macht. Das erlaubt es End-Benutzern die Teile des Codes, die gecached (oder übersprungen) werden sollen, in `if(){ ... }` Anweisungen zu umhüllen wobei die Bedingung die Zend_Cache Methode selbst ist. Am Ende der Blöcke muss das erstellte auf alle Fälle gespeichert werden (z.B. `Zend_Cache_Core::save()`).

| Anmerkung
Das Design der bedingten Ausführung des erzeugten Codes ist in einigen Frontends nicht notwendig (`Function`, zum Beispiel) wenn die komplette Logik im verwendeten Frontend integriert ist.

| Anmerkung
'Cache hit' ist ein Ausdruck für eine Bedingung wenn ein Cache Datensatz gefunden wurde, er gültig und 'frisch' ist (in anderen Worten, er ist noch nicht abgelaufen). 'Cache miss' ist alles andere. Wenn ein 'Cache miss' passiert, müssen die Daten erzeugt werden (wie man es normalerweise tun würde) und anschließend cachen. Wenn ein 'Cache hit' geschieht muß, auf der anderen Seite, das Backend automatisch den Datensatz vom Cache transparent holen.

### 2.2.1. Die `Zend_Cache` Factory Methode

Ein guter Weg um eine verwendbare Instanz eines `Zend_Cache` Frontends zu erstellen wird im folgenden Beispiel gegeben :

    <?php

    # Wir "laden" die Zend_Cache Factory
    require 'Zend/Cache.php';

    # Wir wählen ein Backend (zum Beispiel 'File' oder 'Sqlite'...)
    $backendName = '[...]';

    # Wir wählen ein Frontend (zum Beispiel 'Core', 'Output', 'Page'...)
    $frontendName = '[...]';

    # Wir definieren ein Array von Optionen für das gewählte Frontend
    $frontendOptions = array([...]);

    # Wir definieren ein Array von Optionen für das gewählte Backend
    $backendOptions = array([...]);

    # Wir erstellen eine gute Instanz
    # (natürlich sind die letzten 2 Argumente optional)
    $cache = Zend_Cache::factory($frontendName, $backendName, $frontendOptions, $backendOptions);

    ?>

In den folgenden Beispielen wird angenommen das die `$cache` Variable ein gültiges, initiiertes Frontend, wie gezeigt, enthält, und das verstanden wird, wie Parameter an das ausgewählte Backend übergeben werden.

| Anmerkung
Immer `Zend_Cache::factory()` benutzen um eine Frontend Instanz zu bekommen. Das selbstständige Instantiieren von Frontends und Backends funktioniert nicht so wie erwartet.

### 2.2.2. Markierte Datensätze

Markierungen sind ein Weg um Cache Datensätze zu kategorisieren. Wenn der Cache mit der `save()` Methode abgespeichert werden soll, kann ein Array mit Markierungen für diesen Datensatz angelegt werden. Dann besteht die Möglichkeit alle markierten Cache Datensätze mit einer bestimmten Markierung (oder Markierungen), zu Löschen :

    <?php

    $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC'));

    ?>

### 2.2.3. Löschen des Caches

Um eine bestimmte Cache ID zu entfernen/annullieren kann die `remove()` Methode benutzt werden :

    <?php

    $cache->remove('idToRemove');

    ?>

Um mehrere Cache IDs mit einer Operation zu entfernen/annulieren kann die `clean()` Methode benutzt werden. Zum Beispiel um alle Cache Datensätze zu entfernen :

    <?php

    // Löschen aller Datensätze
    $cache->clean(Zend_Cache::CLEANING_MODE_ALL);

    // Nur abgelaufene löschen
    $cache->clean(Zend_Cache::CLEANING_MODE_OLD);

    ?>

Um Cache Einträge zu Löschen die zu den Tags 'tagA' und 'tagC' passen :

    <?php

    $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('tagA', 'tagC'));

    ?>

Mögliche Löschemodi sind: `CLEANING_MODE_ALL`, `CLEANING_MODE_OLD`, `CLEANING_MODE_MATCHING_TAG` und `CLEANING_MODE_NOT_MATCHING_TAG`. Die Letzteren sind, wie deren Namen vermuten lassen, kombiniert mit einem Array von Markierungen für die Löschoperation.

Zurück | Nach oben | Weiter
Kapitel 2. Zend_Cache | Zum Anfang | 2.3. Zend_Cache Frontends