WordPress Cache nutzen

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 14 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

WordPress besitzt einen internen Cache, der auch für Erweiterungen genutzt werden kann. Dazu stehen diverse Funktionen bereit und man muss keine eigenen Ideen verwirklichen, sondern kann die Cache-Funktionalität von WordPress einfach nutzen.
Um die Funktionen kennen zu lernen und ein wenig zu verstehen eignet sich ein kleines aber verständliches Beispiel am besten und daher cache ich im folgendem Tutorial einen Feed, der im Frontend ausgegeben werden soll.

Alle Funktionen des Cache sind im Codex von WordPress gelistet, so dass ein Blick in den Codex lohnt, wenn man sich mit der Syntax beschäftigt.

Die erste Cache Lösung kam mit WordPress 2.3 und war dateibasierend. Der Cache war optionale und konnte über einige Parameter konfiguriert werden, siehe Artikel WordPress Cache kontrollieren.
Aktiviert wurde er über die folgende Konstante: define('ENABLE_CACHE', true);

Der größte Sprung in der Vergangenheit zum Thema cache fand mit Version 2.6 statt, in der man den Cache auf eine objektorientierte Lösung geändert hat. Damit liegen die Möglichkeiten der Cache-Nutzung eher auf Seiten des Servers und nicht explizit auf Seiten von WordPress. Dies wurde vor allem realisiert, um die größtmöglichen Ressourcen aus dem Server zu schöpfen und nicht an WordPress zu übergeben. Mit dieser Einführung muss der Cache von WordPress auch nicht mehr explizit aktiviert werden, er ist immer aktiv. Daher ist es aber wichtig, dass der Server über ein gewisses Mindestmaß an RAM verfügt, dabei setzt WordPress 32 MByte voraus – ABER, dass ist nicht immer so und so ist beispielsweise beim Updaten des Core ein Aufruf enthalten, der den RAM auf 128MByte definiert, was in vielen Fällen nicht vorhanden und ist und damit klappt das Update nicht.
Aber darum soll es hier nicht gehen, denn ich will ja erklären, wie man den Cache in eigenen Erweiterungen nutzen kann. Also zurück zur Syntax und ich starte einfach mal mit den wichtigsten Funktionen um unser kleines Beispiel zu realisieren.

Alle Funktionen finden sich in wp-includes/cache.php, alternativ im Codex nachlesen.

Um den Cache neu zu setzen, insofern es keine Daten zu diesem Schlüssel gibt, dient die folgenden Funktion.


/**
 * @param int|string $key The cache ID to use for retrieval later
 * @param mixed $data The data to add to the cache store
 * @param string $flag The group to add the cache to
 * @param int $expire When the cache data should be expired
 */
wp_cache_add($key, $data, $flag = '', $expire = 0)

Um Cache-Daten zu einem Schlüssel zu löschen, gibt es das Gegenstück.


/**
 * @param int|string $id What the contents in the cache are called
 * @param string $flag Where the cache contents are grouped
 * @return bool True on successful removal, false on failure
 */
wp_cache_delete($id, $flag = '')

Das Holen von Daten zu einem Schlüssel geschieht mit Hilfe von:


/**
 * @param int|string $id What the contents in the cache are called
 * @param string $flag Where the cache contents are grouped
 * @return bool|mixed False on failure to retrieve contents or the cache
 */
wp_cache_get($id, $flag = '')

Soll innerhalb des Cache zu einem Schlüssel der Inhalt ersetzt werden, dann kommt die nachfolgenden Funktion ins Spiel.


/**
 * @param int|string $id What to call the contents in the cache
 * @param mixed $data The contents to store in the cache
 * @param string $flag Where to group the cache contents
 * @param int $expire When to expire the cache contents
 * @return bool False if cache ID and group already exists, true on success
 */
wp_cache_replace($key, $data, $flag = '', $expire = 0)

Nun aber ein kleines Beispiel, welches den Feed cacht. Der Feed wird mittels fetch_rss() geladen, eine Funktion von WordPress die schon seit Version 1.5 vorhanden ist.


$mycache = wp_cache_get( 'mycache' ); // hole Daten aus dem Cache zu Schlüssel "mycache"
if ($mycache == false) { // wenn es keine Daten gibt, dann
	$mycache = fetch_rss("http://mycache.com/feed/"); // feed parsen
	wp_cache_set( 'mycache', $mycache ); // feedinhalt zum Schlüssel "mycache" abspeichern
}
var_dump( $mycache ); // Inhalt ausgeben

Ein Hinweis noch: einen Einblick in den Cache von WordPress bekommt einfach via der Variable $wp_object_cache oder mit Hilfe der Plugin Debug Objects oder WP Cache Inspect; wobei Debug Objects explizit dafür gemacht wurde und nur für Entwicklungsumgebungen genutzt werden sollte.

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.