Caching

Caching (sinngem.: Zwischenspeicherung) ist eine günstige und wirkungsvolle Methode, um die Leistungsfähigkeit einer Webanwendung zu erhöhen. Indem relativ statische Daten im Cache gespeichert und bei Bedarf auch von dort ausgeliefert werden, sparen wir die Zeit, um diese Daten erneut zu generieren.

Der Einsatz eines Caches besteht in Yii im Wesentlichen aus Zugriffen auf die Cache-Komponente der Anwendung. In der folgenden Konfiguration wird eine Cache-Komponente festgelegt, die Memcache mit zwei Cache-Servern verwendet.

array(
    ......
    'components'=>array(
        ......
        'cache'=>array(
            'class'=>'system.caching.CMemCache',
            'servers'=>array(
                array('host'=>'server1', 'port'=>11211, 'weight'=>60),
                array('host'=>'server2', 'port'=>11211, 'weight'=>40),
            ),
        ),
    ),
);

Wenn die Applikation läuft, kann über Yii::app()->cache auf die Cache-Komponente zugegriffen werden.

Yii bietet verschiedene Cache-Komponenten, die Cache-Daten auf unterschiedlichen Medien speichern kann. Die CMemCache-Komponente zum Beispiel, kapselt die memcache-Erweiterung von PHP und verwendet RAM-Speicher als Medium für den Cache-Speicher. Und die CDbCache-Komponente speichert gecachte Daten in einer Datenbank. Hier eine Übersicht der verfügbaren Cache-Komponenten:

  • CMemCache: Verwendet die memcache-Erweiterung von PHP.

  • CApcCache: Verwendet die APC-Erweiterung von PHP

  • CXCache: Verwendet die XCache-Erweiterung von PHP. Beachten Sie, dass diese Komponente seit Version 1.0.1 zur Verfügung steht.

  • CEAcceleratorCache: Verwendet die EAccelerator-Erweiterung für PHP.

  • CDbCache: Verwendet eine Datenbanktabelle zum Speichern gecachter Daten. Standardmäßig wird eine SQLite3-Datenbank im runtime-Verzeichnisus angelegt und verwendet. Sie können auch explizit eine Datenbank angeben, indem Sie die connectionID-Eigenschaft konfigurieren.

  • CZendDataCache: Verwendet den Zend Data Cache als Cache-Medium. Beachten Sie, dass dieses Feature seit Version 1.0.4 zur Verfügung steht.

  • CFileCache: Verwendet Dateien um gecachte Daten zu speichern. Dies eignet sich besonders zum Cachen umfangreicher Daten (z.B. ganzer Seiten). Beachten Sie, dass dieses Feature seit Version 1.0.6 zur Verfügung steht.

  • CDummyCache: stellt einen Dummy-Cache bereit, der überhaupt nicht cacht. Der Sinn dieser Komponente liegt darin, den Code, der prüft, ob ein Cache vorhanden ist, zu vereinfachen. Wir können diese Cache-Komponente zum Beispiel Während der Entwicklung verwenden oder wenn der Server keinen Cache unterstützt. Wenn der eigentliche Cache-Support dann aktiviert wird, können wir auf die entsprechende Cache-Komponente umschalten. In beiden Fällen können wir den selben Code Yii::app()->cache->get($key) verwenden, um zu versuchen, Daten auszulesen, ohne Gefahr zu laufen, dass Yii::app()->cache null sein könnte. Diese Komponente ist seit Version 1.0.5 verfügbar.

Tipp: Da alle Cache-Komponenten von der selben Basisklasse CCache abgeleitet sind, kann auf eine andere Cache-Art umgestellt werden, ohne den Code verändern zu müssen, der den Cache verwendet.

Caching kann auf unterschiedlichen Ebenen eingesetzt werden. Auf unterster Ebene verwenden wir einen Cache zum Speichern von Daten, wie z.B. einer Variable. Man nennt dies auch Datencaching (engl.: data caching). Eine Ebene höher speichern wir ganze Seitenabschnitte, die von einem View-Teil generiert wurden, im Cache. Und auf der höchsten Ebene speichern wir eine ganze Seite im Cache und liefern sie bei Bedarf von dort aus.

In den nächsten Teilabschnitten gehen wir auf den Einsatz eines Caches auf jeder dieser Ebenen ein.

Hinweis: Per Definition ist ein Cache ein vergängliches Speichermedium. Die Existenz von gecachten Daten wird nicht garantiert, selbst wenn diese niemals verfallen. Benutzern Sie daher einen Cache niemals als beständigen Speicher (speichern Sie dort also z.B. keine Sessiondaten).

$Id: caching.overview.txt 1309 2009-08-08 12:37:23Z qiang.xue $

Be the first person to leave a comment

Please to leave your comment.