Ich suche hier eine endgültige Antwort. Wo leben Optionen und Transienten, wenn die Objekt-Zwischenspeicherung aktiviert ist?
Standardmäßig werden beide in der Datenbank gespeichert. Aber ich habe einige Hinweise gehört, dass memcache sie woanders speichert und APC etwas ganz anderes macht. Wo genau werden diese Daten in beiden Fällen gespeichert?
Antworten:
WordPress führt standardmäßig eine Form von "Objekt-Caching" durch, die Lebensdauer beträgt jedoch nur eine Seite.
Optionen sind tatsächlich ein wirklich gutes Beispiel dafür. Lesen Sie diese Antwort, um weitere Informationen zu erhalten. Die Zusammenfassung:
SELECT option_name, option_value from $wpdb->options
Anweisung geladenget_option
der die Datenbank niemals erreicht, weil sie mit der WP-Cache-API gespeichert werden).Optionen "leben" immer in der Datenbank und werden dort immer beibehalten - das ist ihre "kanonische" Quelle. Das heißt, Optionen werden in den Objekt-Cache geladen. Wenn Sie also eine Option anfordern, besteht eine 99-prozentige Wahrscheinlichkeit, dass die Anforderung niemals die Datenbank erreicht.
Transienten sind etwas anders.
Mit WordPress können Sie die Cache-API durch ein Drop-In ersetzen - eine Datei, die direkt in Ihrem
wp-content
Ordner abgelegt wird . Wenn Sie ein eigenes Cache-Drop-In erstellen oder ein vorhandenes Plug-In verwenden , können Sie den Objekt-Cache länger als eine einzelne Seite laden. Wenn Sie dies tun, ändern Sie die Transienten ein wenig.Werfen wir einen Blick auf die
set_transient
Funktion inwp-includes/option.php
.Hmmm
$_wp_using_ext_object_cache
? Wenn dies zutrifft, verwendet WordPress den Objekt-Cache anstelle der Datenbank, um Transienten zu speichern. Wie wird das nun wahr? Zeit zu erkunden, wie WP seine eigene Cache-API einrichtet.Sie können fast alles auf
wp-load.php
oderwp-settings.php
zurückführen - beides ist entscheidend für den Bootstrap-Prozess von WordPress. In unserem Cache befinden sich einige relevante Zeilenwp-settings.php
.Erinnerst du dich an das Drop-In-Ding von oben? Werfen wir einen Blick
wp_start_object_cache
inwp-includes/load.php
.Die relevanten Zeilen der Funktion (diejenigen, die sich darauf beziehen
$_wp_using_ext_object_cache
, ändern, wie Transienten gespeichert werden).Wenn
object-cache.php
es in Ihrem Inhaltsverzeichnis vorhanden ist, wird es eingeschlossen, und WP geht davon aus, dass Sie einen externen, beständigen Cache verwenden. Es wird$_wp_using_ext_object_cache
auf true gesetzt.Wenn Sie einen externen Objekt-Cache verwenden, wird dieser von Transienten verwendet. Dies wirft die Frage auf, wann Optionen im Vergleich zu Transienten verwendet werden sollen.
Einfach. Wenn Sie Daten für unbegrenzte Zeit benötigen, verwenden Sie Optionen. Sie werden "zwischengespeichert", aber ihre kanonischen Quellen sind die Datenbank, und sie werden niemals verschwinden, es sei denn, ein Benutzer fordert dies ausdrücklich an.
Verwenden Sie für Daten, die für einen festgelegten Zeitraum gespeichert werden sollen, jedoch nicht länger als eine bestimmte Lebensdauer bestehen müssen, Transienten. Intern wird WP versuchen, einen externen, persistenten Objekt-Cache zu verwenden, wenn dies nicht möglich ist. Andernfalls werden Daten in die Optionstabelle verschoben und bei Ablauf über WordPress 'psuedo-cron gesammelt .
Einige andere Bedenken / Fragen:
get_option
? Wahrscheinlich. Sie verursachen den Aufruf eines Funktions-Overheads, der die Datenbank jedoch wahrscheinlich nicht berührt. Das Laden von Datenbanken ist für die Skalierbarkeit von Webanwendungen oft ein größeres Problem als die Arbeit, mit der Ihre Sprache eine Seite erstellt.add_option
mit dem letzten optionalen Argument aufrufen , werdenno
sie nicht automatisch geladen. Das heißt, sobald Sie sie einmal abrufen, werden sie in den Cache verschoben, und nachfolgende Aufrufe werden nicht in die Datenbank übernommen.quelle
Es gibt 4 Cachetypen, die ich kenne
Trivial - Es ist immer aktiviert und wirkt sich aus, bevor ein anderes Caching ins Spiel kommt. Es speichert die zwischengespeicherten Elemente in einem PHP-Array, was bedeutet, dass es Speicher von Ihrer PHP-Ausführungssitzung verbraucht und dass der Cache geleert wird, nachdem die PHP-Ausführung beendet ist. dh auch ohne Verwendung eines anderen Caches, wenn Sie get_option ('opt') zweimal hintereinander aufrufen, führen Sie eine DB-Abfrage nur beim ersten und beim zweiten Mal durch, wenn der Wert aus dem Speicher zurückgegeben wird.
Datei - Die zwischengespeicherten Werte werden in Dateien irgendwo in Ihrem Stammverzeichnis gespeichert. Ich glaube, es hat sich als nicht effektiv in Bezug auf die Leistung erwiesen, es sei denn, Sie haben einen sehr schnellen Datenspeicher mit Festplatten- oder Speicherzuordnung.
APC (oder anderes auf PHP-Beschleunigern basierendes Caching) - Die zwischengespeicherten Werte werden im Speicher Ihres Host-Rechners und außerhalb Ihrer PHP-Speicherzuordnung gespeichert. Die größte potenzielle Gefahr besteht darin, dass keine Datenbereiche festgelegt werden. Wenn Sie zwei Standorte betreiben, kann jeder potenziell auf die zwischengespeicherten Daten des anderen zugreifen oder diese überschreiben.
Memcache - es ist ein netzwerkbasierter Cache. Sie können den Caching-Dienst überall im Netzwerk ausführen und er speichert wahrscheinlich Werte im Host-Speicher. Sie benötigen wahrscheinlich keinen Memcache, es sei denn, Sie haben einen Lastenausgleich in Aktion.
Übrigens, Objekt-Caching ist viel mehr als Optionen-Caching. Es speichert fast alles, was mit der WP-API auf hoher Ebene aus der Datenbank abgerufen wurde.
quelle
Optionen werden immer in der Datenbank gespeichert, während Transienten möglicherweise nur im gemeinsamen Speicher gespeichert werden, wenn APC und ein Plugin installiert sind, das APC-Caching in WP implementiert. Memcache verwendet auch Speicher.
Optionen werden ebenfalls im Speicher gespeichert und von dort geladen, wenn dies möglich ist (andernfalls wird eine Datenbankabfrage durchgeführt).
quelle
Gute Frage.
Ich denke, der Teil, in dem WordPress die
WP_Object_Cache
Klasse verwendet, fehlt noch, also werde ich das hinzufügen.Aus den Dokumenten:
Hier ist die
WP_Object_Cache
Struktur.Mit dieser
stats()
Methode zeigen Sie allgemeine Statistiken über das globale Cache-Objekt und dessen Inhalt an. Hier ist die Ausgabe:Dies ist, was ich zu Beginn einer Vorlage wie z
single.php
.Beachten Sie die Variable , die wir interessiert sind , ist:
global $wp_object_cache
.Der private Bereich, in dem sich das Mitglied befindet,
$cache
enthält die eigentlichen Caching-Daten.Seit ich drin war,
single.php
als ich den Cache gedruckt habe:Ich bekomme einen einzelnen Beitrag zwischengespeichert.
Das Objekt wäre der Wert und der Caching-Schlüssel wäre
Hier können Sie die
$cache_key
Struktur überprüfen :quelle