Um die Auswirkungen des Caches zu zeigen, haben wir versuchsweise einen Shopware-Shop mit Demodaten ohne und mit Cache aufgesetzt.
Die Ergebnisse zeigen nach 1.000 erfolgreichen Anfragen deutliche Unterschiede. So benötigte der Demoshop ohne Cache 55,71 Sekunden, um alle Anfragen zu verarbeiten. Das entspricht 17,95 Anfragen pro Sekunde und etwa 2,80 MB/Sekunde an Traffic.
Dagegen benötigte der Demoshop mit Cache nur 11,62 Sekunden, um die gleiche Zahl an Anfragen zu verarbeiten. Das entspricht 86,05 Anfragen pro Sekunde und etwa 13,42 MB/Sekunde an Traffic.
Caching in Shopware
Standardmäßig nutzt Shopware 6 die Festplatte zur Speicherung des HTTP-Caches. Externe In-Memory-Speicher wie Redis können für eine effizientere Verwaltung und schnellere Zugriffszeiten integriert werden.
Redis ist ein leistungsstarker In-Memory Key-Value-Speicher, der schnelle Datenzugriffszeiten ermöglicht, da die Daten im Arbeitsspeicher vorgehalten werden. Außerdem werden verschiedene Datenstrukturen und Mechanismen zur Datenpersistenz unterstützt.
Shopware 6 unterstützt die Integration von Redis, was die Effizienz des Caching-Systems nochmal verbessern kann. Gerade bei Seiten mit viel Traffic macht sich Redis als Session-Speicher und Model-Cache sehr bemerkbar. Unsere Anleitung zu diesem Thema hilft Ihnen dabei, in wenigen Schritten Shopware 6 mit Redis zu verbinden.
Warum der Cache viel Speicherplatz belegen kann
Für Shops, die viele Artikel, Variationen, Kategorien und insgesamt einfach viele Produkte anbieten, wird oft versucht für jeden Artikel in jeder Variation den HTTP-Cache zu erstellen. Durch die vielen Produkte und Variationen entstehen viele Dateien direkt auf dem Dateisystem und abhängig von der Konfiguration im Shop-Backend kann der HTTP-Cache eines Shops enorm groß werden und (teilweise) mehrere Hundert GB Speicherplatz belegen.
Standardmäßig leert Shopware 6 den Cache nicht automatisch.
Cache-Warming sorgt für CPU-Last
Inhalte, zu denen kein Cache vorhanden ist, werden in der Regel beim ersten Besuch einer Seite direkt erstellt. Wenn man nun sicher gehen will, dass für alle Inhalte ein Cache-Eintrag verfügbar ist, kann man den gesamten Cache "aufwärmen". Das wird meistens direkt auf der CLI (durch bin/console cache:warmup
) gestartet und wird häufig als Cronjob jede Nacht ausgeführt.
Das Aufwärmen des gesamten Caches führt dazu, dass der Shop alle Artikel in allen Varianten und alle Kategorien von selbst aufruft und dadurch einen Besuch emuliert. So wird ein Cache-Eintrag erstellt. Hat der Shop sehr viele Artikel und Variationen, verursacht das Warmup sehr viel CPU-Last und kann durchaus die ganze Nacht dauern. Unter dieser hohen Auslastung ist der Server möglicherweise nur bedingt erreichbar und arbeitet nur sehr träge.
Besser ist es, sich auf die wichtigsten Seiten zu fokussieren, beispielsweise Hauptkategorien und häufig besuchte Produktseiten. Standardmäßig cached Shopware 6 Inhalte für 7200 Sekunden. (SHOPWARE_HTTP_DEFAULT_TTL=7200
). Wenn sich Inhalte selten ändern, könnten diese auch länger im Cache bleiben, die Aktualität der Inhalte zu wahren aber gleichzeitig die Performance zu optimieren.
Speicherplatz optimieren
Um die Effizienz zu maximieren und den Speicherbedarf zu kontrollieren, empfiehlt es sich, den Cache regelmäßig zu überprüfen und ggf. zu leeren. In unserem ausführlichen Leitfaden zum Caching in Shopware 6 finden Sie auch eine Anleitung zum Leeren des Caches in Shopware 6.
Prüfen Sie regelmäßig, wie viel Speicherplatz Ihnen auf Ihrem Server zur Verfügung steht, um zu verhindern, dass es aufgrund dessen zu einem Ausfall kommt.
Einige Tipps zur Verwaltung des Speicherplatzes auf Ihrem Server haben wir in einem früheren Beitrag zusammengestellt.
Die Herausforderungen beim Caching in Shopware 6 sind vielschichtig, aber durch eine durchdachte Strategie und bewährte Best Practices lassen sie sich erfolgreich bewältigen.