Wie erstelle ich eine zwischengespeicherte Seite neu, wenn sie abläuft?

7

Ich verwende das Zwischenspeichern von Ansichten, nachdem ich diese großartigen Fragen und Antworten gelesen und gute Ergebnisse erzielt habe. Ich muss den Ablauf kurz halten, da ich den "letzten Kommentar" in der Ansicht und diese Änderungen häufig anzeige.

Ich denke darüber nach , den Inhaltscache für Ansichten zu verwenden, um den Cache jedes Mal zu verfallen, wenn ein Kommentar hinzugefügt wird. Oder Cache-Aktionen , um dies mit Regeln zu tun.

Ich möchte den Cache sofort nach Ablauf neu erstellen. Ich habe gelesen, dass das Boost-Modul dies bietet, aber ich benötige eine Lösung für authentifizierte Besucher (verwenden Sie Varnish bereits für anonym).

Das Cache-Graceful- Modul scheint dies zu bieten, verfügt jedoch nur über 20 Installationen (plus erfordert einige andere Module).

Gibt es andere Lösungen, mit denen ein Cache abgelaufen und sofort "aufgewärmt" werden kann?

uwe
quelle
Drupal 6 oder 7? Welches Cache-Backend verwenden Sie? Datenbank, Memcache? Lack vorne?
Mikeytown2
7 mit Memcache und Lack
uwe
1
Verstehe ich es richtig, dass Sie hauptsächlich die Ansichten vorspeichern möchten, nicht ganze Seiten?
Mojzis
Das Zwischenspeichern von Ansichten wäre ein guter Anfang.
Uwe

Antworten:

4

Wenn Sie wissen, welche Funktionen ausgeführt werden müssen, um einen Cache aufzuwärmen, überprüfen Sie httprl . httprl_queue_background_callback () ist die Funktion, deren Verwendung untersucht werden soll. Einfaches Beispiel für den Aufruf von watchdog im Hintergrund http://drupalcode.org/project/httprl.git/blob/24a88acd2180191d0b54696e577f14615e37302d:/README.txt#l268

In Bezug auf das ordnungsgemäße Löschen des Lackcaches gibt es ein gutes Beispiel: https://www.varnish-cache.org/trac/wiki/VCLExampleGrace Verwendetes Beispiel: http://groups.drupal.org/node/63203

mikeytown2
quelle
Vielen Dank. Dies ähnelt also der Verwendung von wget oder curl zum Abrufen einer Seite, um sie zwischengespeichert zu bekommen? Wenn ja, bin ich mir nicht sicher, wie ich es mit dem Ablauf eines Caches zeitlich festlegen würde.
Uwe
2

Boost for Drupal 7 funktioniert hervorragend und dank des neuen Crawler-Submoduls und des Cache Expiration-Moduls können Sie jede Auswahl Ihrer Seiten bedingt ablaufen lassen und proaktiv neu zwischenspeichern. Bei einem solchen Setup benötigen Sie keine Module wie den Views Content Cache, da Sie mit der obigen Zubereitung dasselbe Verhalten erzielen können, und zwar nicht nur für Views (Cache Expiration ist in Rules integriert, sodass die Möglichkeiten wirklich unbegrenzt sind). Auf dieser Seite finden Sie ein vollständiges Rezept, mit dem dies funktioniert .

Vacilando
quelle
1

Es gibt ein ziemlich neues Modul namens https://www.drupal.org/project/recacher. Es arbeitet mit https://www.drupal.org/project/expire und https://www.drupal.org/ zusammen. project / httprl_spider

Anstatt alles neu zu crawlen, werden nur die Knoten zwischengespeichert, die im abgelaufenen Modul gelöscht wurden.

In meiner Landschaft sollte es so funktionieren: Auf Knoten ändern / erstellen -> Ablaufen -> Von Nginx löschen -> mit httprl_spider erneut zwischenspeichern.

Auf diese Weise ist der Cache in den meisten Fällen frisch.

Macbert
quelle
0

Sie sollten in Betracht ziehen, das Cache- Aktionsmodul in Verbindung mit einem benutzerdefinierten Modul zu verwenden, das den Code aus dem Cache-Warmer- Modul wiederverwenden kann .

Die Cache-Erwärmung kann durch Pingen der geänderten / gewünschten URLs als verschiedene Benutzer erfolgen (ein Benutzer pro Regel). Sie müssten einige cURL-Aufrufe zusammen mit den Benutzeranmeldeinformationen durchführen. Das Cache Warmer-Modul enthält den Code, wie diese Aufrufe ausgeführt werden sollen.

Mit dem Modul "Caching-Aktionen" können Sie also festlegen, wann der Cache für eine bestimmte Seite beschädigt werden soll, und in der nachfolgenden Aktion in können Sie die Funktion Ihres benutzerdefinierten Moduls aufrufen, um diese bestimmte URL oder diesen URL-Satz im Cache zu erwärmen.

Gokul NK
quelle
0

Ich denke, dass Ihre beste Option Edge Side Includes ist . Schauen Sie sich das Integrationsmodul Edge Side Includes an . Hier ist ein Zitat dazu (von der Projektseite des Moduls):

ESI - oder Edge Side Includes - ist eine leistungsstarke Caching-Lösung für authentifizierte Benutzer, kann aber auch für anonyme Benutzer hilfreich sein.

In der Regel verhindern Seiten, die für authentifizierte Benutzer personalisiert sind (selbst geringfügige Personalisierungen, z. B. ein Block mit der Aufschrift "Als Manarth angemeldet"), dass Reverse-Proxys (die problemlos 100-mal schneller als Drupal ausgeführt werden können) die Seite aufgrund von Nachrichten zwischenspeichern für einen Benutzer bestimmt könnte dann von einem anderen gesehen werden.

ESI ist ein W3C-Standard, um dieses Problem zu beheben. Der personalisierte Inhalt wird durch ein ESI-Tag ersetzt, <esi:include src="http://example.com/esi/block/xxxxxx" />das für jeden Benutzer identisch ist. Die Seite kann dann zwischengespeichert werden. Edge-Geräte wie Varnish rufen die ESI-URL ab und führen ihren Inhalt mit der zwischengespeicherten Seite zusammen (und der Inhalt dieser ESI-URL kann auch zwischengespeichert werden).

Diese Technik kann die Leistung leicht um das 10-fache, 100-fache oder sogar noch mehr verbessern.

Penyaskito
quelle
1
Während ESI eine gute Alternative zum Ganzseiten-Cache ist, fordert das OP eine Lösung zum Aufwärmen des Seiten-Cache. Nicht für alternative Caching-Lösungen.
Pierre Buyle