Skip links
DE DE
ENEN FRFR

Object Caching in WordPress: Redis und Memcached

WordPress-Seiten, die eine große Anzahl von Nutzern bedienen, müssen über einen kontinuierlichen Caching-Mechanismus verfügen, nicht nur für Bilder und Seiten, sondern auch für die PHP-Objekte selbst. Obwohl WordPress diesen Mechanismus bereits über WP_Object_Cache bereitstellt, gibt es andere Lösungen, die größere Möglichkeiten bieten. Aber lassen Sie uns zunächst untersuchen, was Object Caching in WordPress ist und wie es in PHP funktioniert.

Object Caching

Als objektorientierte Programmiersprache verwendet PHP das Objektparadigma, um den Code zu strukturieren. Daher kann eine WordPress-Website aus vielen verschiedenen PHP-Objekten bestehen, die ständig erstellt, instanziiert und zerstört werden (vom Speichermanager). Diese Erstellung und Zerstörung von Objekten hat ihren Preis, besonders wenn viele solcher Ereignisse auftreten. Darüber hinaus werden viele von ihnen häufig wiederverwendet, da sie zentrale Funktionen darstellen. Mit anderen Worten, jedes Mal, wenn die Anwendung sie erneut benötigt, müssen sie von Grund auf neu instanziiert werden.

Idealerweise sollten solche Objekte zwischengespeichert werden, anstatt sie zu zerstören und von Grund auf neu zu erstellen.

Sie können die PHP-Funktion serialize() verwenden, um ein Objekt in ein Blob umzuwandeln, das im Speicher oder auf der Festplatte für den späteren Zugriff gespeichert werden kann. Anschließend können Sie die Hash-Nummer des Blobs mit der Funktion hash() berechnen und beides auf die gleiche Weise speichern – den Hash als Schlüssel und das Blob als Wert. Um es wieder aufzurufen, würden Sie die zuvor gespeicherte Hash-Nummer des Blobs als Schlüssel verwenden. Auf diese Weise können Sie alles (eine Zeichenkette, eine Zahl, ein Objekt, ein Array usw.) in eine Version umwandeln, die im Speicher oder auf der Festplatte gespeichert werden kann.

Beispiel:

$serialized = serialize(array('test'));

Sie können auch die umgekehrte Operation mit der Funktion unserialize() durchführen:

$original = unserialize($serialized);

Im Wesentlichen gibt es drei Möglichkeiten, wie Sie Objekte cachen können: mit dem nativen WordPress-Object-Cache, der Transients-API oder externem Key-Value-Speicher, der von Redis oder Memcached bereitgestellt wird.

WordPress Object Cache

WordPress bietet zwei Caching-APIs: den nativen WordPress-Object-Cache und die Transients-API. Sie sind identisch, und obwohl dies Verwirrung stiften könnte, gibt es eine Logik dahinter, die wir jetzt erklären werden.

Der native WordPress Object Cache kann Objekte und Primitive im Cache speichern, jedoch nicht in einer persistenten Weise. Das bedeutet, dass das Caching im Speicher stattfindet und die zwischengespeicherten Objekte über ihre definierte Lebensdauer hinaus nicht erhalten bleiben. Aus diesem Grund können Sie zwischengespeicherte Objekte nicht über verschiedene Seiten hinweg teilen, nachdem sie einmal geladen wurden. Um dies zu ermöglichen, benötigen Sie ein Plugin, das die Funktionalität von WordPress erweitert, um persistentes Objekt-Caching zu verwalten.

Die Transients-API hingegen bietet eine vollständigere Lösung. Sie können Variablen, Arrays und Objekte mit einem definierten Ablaufdatum direkt in der Datenbank speichern, um persistentes Objekt-Caching sicherzustellen. Ein Nachteil ist jedoch, dass, wenn ein zwischengespeichertes Objekt abläuft, es weiterhin in der Datenbank verbleibt und unnötig Platz beansprucht. Das bedeutet, dass Sie die Datenbank regelmäßig überwachen müssen, um solche Objekte zu entfernen.

WordPress kann erkennen, ob Sie eine benutzerdefinierte Objekt-Caching-Lösung implementiert haben, und wenn dies der Fall ist, werden alle Aufrufe an die Transients-API umgangen und an den WordPress-Object-Cache weitergeleitet (weshalb sie identisch erscheinen).

Redis und Memcached

Redis ist eine Schlüssel-Wert-Datenbank, die Daten im Speicher speichert und gelegentlich Datenbank-Dumps auf die Festplatte erstellt und eine hohe Verfügbarkeit in einer Cluster-Konfiguration bietet. Sie können das Maß an Persistenz auf der Festplatte fein abstimmen. Das Gute an Redis ist, dass nach einem Systemneustart der größte Teil des Cache-Speichers weiterhin verfügbar ist, da er von der Festplatte in den Speicher geladen wird. In einem normalen Szenario müsste nach einem Serverneustart der Cache-Speicher neu aufgebaut werden, was typischerweise die Last erhöht. Bei Redis passiert das nicht. Darüber hinaus werden abgelaufene Objekte sofort aus der Datenbank gelöscht, sodass keine zusätzliche Überwachung abgelaufener Objekte erforderlich ist.

Memcached ist ebenfalls ein Schlüssel-Wert-Speicher, der speziell für das Caching von Objekten entwickelt wurde, insbesondere um dynamische Webanwendungen zu beschleunigen und die Datenbanklast zu verringern. Es ist einfacher zu verwenden als Redis und unterstützt keine Dumps auf die Festplatte, da Memcached mehrsträngig ist, während Redis einsträngig arbeitet.

Da es speziell für das Caching von Objekten auf Webseiten entwickelt wurde und eine In-Memory-Datenbank verwendet, bietet es eine schnelle Lösung für das Caching von Objekten. Der Nachteil ist jedoch, dass, wie bereits erwähnt, nach einem Serverneustart der Cache-Speicher gelöscht wird, und bis er neu aufgebaut ist, wird wahrscheinlich eine erhöhte Last auf der Datenbank auftreten. Dies ist ein Nachteil des Systems, aber es ist dennoch sinnvoll, es als Caching-System für Ihre Website zu verwenden.

Fazit

Wie wir gesehen haben, haben beide Lösungen ihre Vor- und Nachteile. Ob Sie sich für eine der beiden entscheiden, hängt hauptsächlich von der Anzahl der Objekte ab, die Ihre Anwendung/Website hat. Wenn es nur eine kleine Anzahl von Objekten gibt (sagen wir ein Dutzend), werden Sie wahrscheinlich keinen großen Nutzen oder eine Beschleunigung durch die Verwendung dieser Lösungen bemerken. Wenn die Anzahl jedoch in die Hunderte geht, könnten Sie von der Implementierung einer der genannten Lösungen profitieren. In jedem Fall wissen Sie jetzt mehr darüber, wie Object Caching in WordPress funktioniert.

Leave a comment

🍪 This website uses cookies to improve your web experience.