Ist für das Caching nicht wichtig, wenn Sie Ansichten oder db_query () verwenden. Das Caching funktioniert immer gleich. Wie die Daten abgerufen werden, wenn der Cache fehlt, liegt ganz bei Ihnen.
- Erstellen Sie eine Cache-ID, um Ihren Cache-Eintrag zu identifizieren. Kann eine einfache, fest codierte Zeichenfolge oder etwas Komplexes sein, das auf Argumenten usw. basiert.
- Überprüfen Sie, ob aus dem Cache geladen werden kann.
- Wenn nicht, erstellen Sie die Daten neu und legen Sie sie mit der gewünschten Ablaufzeit im Cache ab.
Um einige Beispiele zu sehen, können Sie sich die Funktionen ansehen , die cache_get () verwenden , z. B. variable_initialize () .
Wenn Ihre Funktion mehrmals aufgerufen wird, möchten Sie sie wahrscheinlich mit einem statischen Cache kombinieren, siehe zum Beispiel archiver_get_info () . Und wenn die Datenwiederherstellung sehr langsam ist, können Sie verhindern, dass sie mehrmals ausgeführt wird, indem Sie das Sperrframework wie variable_initialize () verwenden.
Beachten Sie, dass das Zwischenspeichern einer einzelnen Abfrage nur dann sinnvoll ist, wenn es sich um eine langsame Abfrage handelt, da cache_get () auch eine Datenbankabfrage ist, es sei denn, Sie verwenden ein alternatives Cache-Backend wie Memcache.
Und schließlich ist in Views bereits Caching integriert, das in Ihrer Ansicht konfiguriert werden kann. Das könnte also auch eine Option sein.
db_query()
, und das Zwischenspeichern des Werts von$results->fetchAll()
und nicht$results
ist der Schlüssel, um ihn tatsächlich zum Laufen zu bringen.Ich glaube nicht, dass die DB-Schicht einen eingebauten Caching-Mechanismus hat (obwohl ich mich möglicherweise irre), aber Sie könnten die Standard-Cache-API verwenden.
Dies ist nur ein einfaches Beispiel, mit dem die Ergebnisse einer Abfrage zwischengespeichert werden, um Knoten eines bestimmten Typs abzurufen:
quelle
Neben dem Standard - cache_set / cache_get Mechanismus , dass Drupal bietet, wenn Sie MySQL als Datenbank verwenden, dann können Sie die ermöglichen Abfrage - Cache , der die Ergebnisse der Ansichten cachen können, oder jede andere Datenbankabfragen, transparent. mysqltuner kann dabei helfen, gute Werte für die Cache-Größe herauszufinden.
Beachten Sie nur, dass das Zwischenspeichern von Abfragen aufgrund der Funktionsweise der Strategie zur Ungültigmachung des Caches weniger effektiv wird, wenn Sie viel in die Datenbank schreiben (ein Schreiben in eine Tabelle macht alle Einträge ungültig, die diese Tabelle AUSWÄHLEN oder VERBINDEN).
Es gibt auch einen Caching-Mechanismus für PostgreSQL , aber ich habe keine direkte Erfahrung damit.
quelle
Ich habe kürzlich das Modul Cache-Aktionen entdeckt . Mit diesem Modul können Sie das Zwischenspeichern von Ansichten auf durch Regeln ausgelösten Cache einstellen und eine Regel zum Ungültigmachen des Caches für bestimmte Ansichten und Ansichtsanzeigen erstellen.
Beispielsweise kann der Cache für eine Ansicht, in der Knoten eines bestimmten Inhaltstyps aufgelistet sind, geleert werden, wenn ein neuer Knoten dieses Inhaltstyps erstellt wird.
quelle