Cache-Schichten
Diese Seite ist für Systemadministratoren und Support-Mitarbeitende bei Hosting-Anbietern. Sie beantwortet: welche Caches eine Exponential-Website hat, vom Browser des Besuchers bis hinunter zur Datenbank, welche davon eingeschaltet ausgeliefert werden, wo jeder liegt, welcher Server ihn nutzt und wie jeder geleert wird. Damit kann ein Hoster entscheiden, was ein Tarif einschaltet, und der Support erkennen, woher eine veraltete oder langsame Seite kommt.
Inhalt
- Die Schichten auf einen Blick
- Vor dem Server
- Im Server, vor dem Kernel
- Im Kernel
- Unter dem Kernel
- Welche Schichten zwischen Servern geteilt werden
- Die Header lesen
- Was ein Tarif einschalten kann
- Checkliste
Die Schichten auf einen Blick
| # | Schicht | Ausgeliefert | Bedient | Geleert durch |
|---|---|---|---|---|
| 1 | Browser-Cache statischer Dateien | Velocity: StaticMaxAge=31536000; Apache: Ihr mod_expires | alle | Dateinamen, oder das Abwarten der Lebensdauer |
| 2 | Browser-Cache von Seiten | aus (site.ini [HTTPHeaderSettings] CustomHeader=disabled) | anonyme Besucher, wenn eingeschaltet | Lebensdauer |
| 3 | CDN, zwischenspeichernder Proxy oder der Seiten-Cache von LiteSpeed und OpenLiteSpeed | nicht Teil von Exponential (LiteSpeed: ein auskommentierter Block in .htaccess_root) | wie Sie es konfigurieren; LiteSpeed: anonyme Besucher | Ihren Proxy; LiteSpeed: max-age; Exponential sendet kein Leeren |
| 4 | Antwort-Cache von Velocity | an unter Velocity (velocity.ini [CacheSettings] Enabled=enabled) | anonyme Besucher | exp:velocity cache clear |
| 5 | Rollenbewusster HTTP-Cache | aus (httpcache.ini [HttpCacheSettings] Enabled=disabled) | anonyme und angemeldete Besucher, je Berechtigungskontext | bei Änderungen an Inhalten geleert; --clear-id=exphttpcache |
| 6 | Statischer Cache | aus (site.ini [ContentSettings] StaticCache=disabled) | anonyme Besucher, als Dateien | beim Veröffentlichen neu erzeugt |
| 7 | Content-View-Cache | an ([ContentSettings] ViewCaching=enabled) | jeden Besucher | Änderung an Inhalten; --clear-tag=content |
| 8 | Template-Block-Cache | an ([TemplateSettings] TemplateCache=enabled) | jeden Besucher | Ablauf; --clear-id=template-block |
| 9 | Kompilierte Templates, INI- und Override-Caches | an | jede Anfrage | --clear-tag=template, --clear-tag=ini |
| 10 | Redis oder Valkey für Views, Blöcke, INI | nur mit der Erweiterung sevenx_valkey_cache | jede Anfrage | das Leeren der Erweiterung; ihr Skript zum Leeren |
| 11 | SQL-Abfrage-Cache | aus (querycache.ini [QueryCacheSettings] Mode=off) | jede Anfrage, die er beantworten kann | Schreibvorgänge in die gelesenen Tabellen; --clear-id=querycache |
| 12 | OPcache, APCu | pro PHP-Prozess | jede Anfrage | Neuladen oder Neustart; Schaltflächen in Setup > Caches |
Quellen: Caches, Kapitel 10, Abschnitt 10.6 und die unten verlinkten Seiten.
Vor dem Server
Browser. Velocity sendet Cache-Control mit einer Lebensdauer von einem Jahr für Stylesheets, Skripte und Bilder
([ServerSettings] StaticMaxAge); eine unter demselben Namen ersetzte Datei wird erst nach Ablauf erneut geholt. Seiten werden mit
no-cache gesendet, es sei denn, [HTTPHeaderSettings] ist nur für anonyme Besucher eingeschaltet. Siehe
HTTP-Cache-Header. Unter Velocity kann ein optionaler Navigations-Cache (ein Service Worker, /index.js und
sw.js) wiederholte Besuche im eigenen Browser des Besuchers beantworten
(Der Antwort-Cache, und dem Netzwerk aus dem Weg gehen).
CDN oder Proxy. Exponential sendet keine Anfragen zum Leeren oder Sperren an einen Proxy; einem Proxy, der Seiten speichert, muss gesagt werden, was er speichern soll und wie lange. Siehe Varnish und Reverse Proxys und CDN.
Der Seiten-Cache von LiteSpeed und OpenLiteSpeed. Auf diesen Servern kann der Webserver selbst Seiten aufbewahren:
Der auskommentierte Block ## >>> LiteSpeed page cache in .htaccess_root (oder dieselben Regeln im virtuellen
Host) speichert anonyme GET-Anfragen ohne Abfragezeichenkette, Sitzungs- oder Anmelde-Cookie für max-age Sekunden
und beantwortet sie ohne PHP. Beim Veröffentlichen leert ihn nichts; er läuft ab. Siehe
Seiten-Caching mit LiteSpeed und OpenLiteSpeed.
Im Server, vor dem Kernel
Antwort-Cache von Velocity. Hält gerenderte anonyme Seiten im Elternprozess und beantwortet wiederholte Anfragen, bevor ein Worker gewählt wird: kein Fork, kein PHP, keine Datenbank. Standard-Lebensdauer 30 Sekunden, stale-while-revalidate 60 Sekunden; angemeldete Besucher werden nie daraus bedient. Siehe Antwort-Cache von Velocity.
Rollenbewusster HTTP-Cache. Standardmäßig aus. Wenn an, hält er ganze Inhaltsansichten pro Berechtigungskontext (anonym, ein
Rollenkontext, den Benutzer mit denselben Rollen teilen, oder ein privater Kontext) und liefert sie aus, bevor der Kernel startet:
unter Apache oder PHP-FPM über einen frühen Ausstieg, der aus config.php eingebunden wird, unter Velocity aus dem Serverprozess. Er
leert bei Änderungen an Inhalten (standardmäßig ContentChangePurges=all). Gemessen auf einer Referenzinstallation, eine Seite eines
angemeldeten Benutzers unter Apache: 484 Anfragen pro Sekunde aus dem Cache gegenüber 4,3 gerenderten
(HTTP-Cache).
Statischer Cache. Standardmäßig aus, und das Installationsbuch sagt, ihn auszulassen: Wenn er an war, erzeugte jede Veröffentlichung jede betroffene Seite über HTTP innerhalb der Anfrage des Redakteurs neu. Siehe Statischer Cache.
Im Kernel
| Cache | Was er enthält | Einstellung |
|---|---|---|
| Content-View-Cache | den gerenderten Inhalt jeder Ansicht eines Knotens | site.ini [ContentSettings] ViewCaching |
| Template-Block-Cache | cache-block-Fragmente von Templates | [TemplateSettings] TemplateCache |
| Kompilierte Templates | zu PHP kompilierte Templates | [TemplateSettings] TemplateCompile |
| INI-, Override-, Übersetzungs-, Design-Caches | zusammengeführte Einstellungen und Nachschlagewerte | immer an |
| Bild-Aliase | in der Größe geänderte Bilder, bei der ersten Ansicht erzeugt | image.ini |
Wenn eine Änderung die View-Caches von [ContentSettings] CacheThreshold Knoten oder mehr (250 mitgeliefert) leeren würde, wird
stattdessen jeder View-Cache der Website als abgelaufen markiert, und das Log meldet Expiring all view cache
(Caches, häufige Fragen).
Mit der Erweiterung sevenx_valkey_cache können der Content-View-Cache, Template-Blöcke und der kompilierte INI-Cache statt in Dateien
in Redis oder Valkey liegen. Siehe Valkey und Redis.
Unter dem Kernel
SQL-Abfrage-Cache. Standardmäßig aus. Mode=request entfernt wiederholte identische SELECTs innerhalb einer Anfrage;
Mode=shared hält Ergebnisse über Anfragen hinweg in APCu oder Dateien. Gemessen auf einer Testinstallation unter Apache mit PHP-FPM
ging eine gerenderte Startseite von etwa 0,6 s auf etwa 0,17 s, ohne dass eine Anweisung an die Datenbank ging
(SQL-Abfrage-Cache). Er funktioniert mit den SQL-Treibern (1. SQLite 3, 2. PostgreSQL,
4. MariaDB, 5. Oracle über ezoracle, 6. MySQL); der Treiber für 3. MongoDB nutzt ihn nicht. Schreibvorgänge außerhalb von Exponential
(eine Wiederherstellung, ein SQL-Client) sind für ihn unsichtbar: Leeren Sie ihn nach jeder Wiederherstellung.
OPcache und APCu gehören zu jedem PHP-Prozessbaum. Siehe OPcache und Abstimmung von PHP-FPM.
Welche Schichten zwischen Servern geteilt werden
Die Cache-Dateien liegen in var/, das sich Apache mit PHP-FPM und Velocity teilen: Das Leeren eines Caches in Setup > Caches erreicht
beide. Zwei Dinge nicht (Caches):
- Velocity hält Einstellungen im Speicher: Starten Sie es nach dem Leeren der INI-Caches neu.
- Der Antwort-Cache von Velocity beantwortet Seiten aus seinem eigenen Speicher: Leeren Sie ihn mit
exp:velocity cache clear.
APCu und OPcache gelten pro Prozessbaum. Auf mehreren Web-Knoten werden Dateien in einem geteilten var/ geteilt; APCu gilt pro Server
(dafür gibt es Storage=file des Abfrage-Caches). Siehe Mehrere Web-Knoten.
Die Header lesen
| Header | Gesetzt von | Bedeutung |
|---|---|---|
X-Cache: HIT, STALE | dem Antwort-Cache von Velocity | aus dem Cache beantwortet, oder aus einer abgelaufenen Kopie, während eine neue gerendert wird |
Age | dem Antwort-Cache von Velocity | Sekunden, seit der Eintrag gespeichert wurde |
X-Exp-Cache: HIT, STALE, MISS (reason), BYPASS (reason) | dem rollenbewussten HTTP-Cache | was er getan hat und warum |
curl -sI https://example.com/ | grep -iE 'x-cache|x-exp-cache|age|cache-control'Eine Seite, die der Antwort-Cache von Velocity beantwortet, trägt auch das mit ihr gespeicherte X-Exp-Cache, oft MISS aus dem
Rendering, das beide Caches gefüllt hat (HTTP-Cache, sehen, was er tut).
Was ein Tarif einschalten kann
| Schicht | Option im Tarif | Achten Sie auf |
|---|---|---|
| Antwort-Cache von Velocity | an bei Tarifen mit Velocity | DefaultTtl ist, wie veraltet eine anonyme Seite sein darf |
| Rollenbewusster HTTP-Cache | eine Option für Websites mit vielen angemeldeten Besuchern | Sitzungen müssen in Dateien liegen, die jeder Server lesen kann |
| SQL-Abfrage-Cache | request überall; shared mit bemessenem APCu | nach Wiederherstellungen leeren |
| Redis oder Valkey | eine Option, wo Sie den Server betreiben | dimensionieren, eine Verdrängungsrichtlinie setzen |
| Seiten-Header für Browser und CDNs | eine Option für Websites mit überwiegend anonymen Besuchern | immer OnlyForAnonymous=enabled |
| Statischer Cache | nicht empfohlen | Kosten beim Veröffentlichen |
Checkliste
- To do: Der Tarif sagt, welche Schichten an sind und wer sie leert.
- To do: Der Support kennt die Header oben und die Reihenfolge beim Leeren (Caches leeren und vorwärmen).
- To do: Caches mit gerenderter Ausgabe werden erst geleert, wenn neuer Code läuft.
- To do: Der Abfrage-Cache wird nach jeder Wiederherstellung der Datenbank geleert.
- To do: Kein Proxy und kein CDN speichert Seiten, die von einem Sitzungscookie abhängen.
Verwandte Seiten
- Antwort-Cache von Velocity
- HTTP-Cache-Header
- Caches leeren und vorwärmen
- Caches
- Cache-Steuerung aus der Konsole
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.