Caching im E-Commerce
Dunkelblauer Hintergrund, davor das Shopware 6-Logo, Headline in weiß: Caching in Shopware 6; Subheadline in blau: Effizientes Cache-Management

Caching im E-Commerce

Schnelle Ladezeiten, geringe Serverbelastung und eine optimale Nutzererfahrung sind im Onlinehandel unerlässlich. Hier wird Caching genutzt, ein Mechanismus, der häufig genutzte Daten zwischenspeichert, um deren Inhalte nicht immer wieder neu berechnen zu müssen und so den Zugriff auf häufig benötigte Informationen zu beschleunigen.

Unser neuer Leitfaden betrachtet das Chaching in Shopware 6 und gibt Ihnen einige Hinweise zum effektiven Management des Shopware-Caches mit auf den Weg.

Zum Leitfaden

Caching kurz erklärt

Beim Caching werden häufig abgerufene Daten zwischengespeichert, sodass diese nicht bei jedem Seitenaufruf neu generiert und/oder aus der Datenbank erneut abgefragt werden müssen. Dies geschieht auf verschiedenen Ebenen und mithilfe verschiedener Technologien, die jeweils unterschiedliche Aspekte des Systems optimieren. Dazu gehören z.B.:

  • HTTP-Cache: Speichert vollständige HTML-Seiten und liefert statische Versionen dieser Seiten schnell an die Benutzer aus.
  • Model-Cache: Speichert Ergebnisse von Datenbankabfragen und Datenmodellen, um häufig benutzte Daten schneller bereitzustellen.
  • Backend-Cache: Unterstützt die Funktionalitäten im Administrationsbereich, indem administrative Daten und Konfigurationen zwischengespeichert werden.
  • Session-Cache: Verwaltet Benutzersitzungen und temporäre Daten (z.B. Warenkorbinhalte), wodurch kontinuierlich eine reibungslose Benutzererfahrung gewährleistet wird.

Caching im E-Commerce

Caching spielt eine entscheidende Rolle im E-Commerce. Durch den Zugriff auf Daten im Cache werden Webseiten schneller geladen, was nachweislich zu einer höheren Conversionrate führt. Hoher Traffic lässt sich durch effizientes Caching leichter abfangen und die Reaktionszeiten bleiben relativ stabil. Dadurch, dass weniger Anfragen neu berechnet werden müssen, bleibt mehr Rechenleistung für mehr Besucher übrig.

Um den Effizienz-Gewinn in Zahlen zu beschreiben, haben wir einen einfachen Test durchgeführt, der aber dennoch deutlich den Unterschied zeigt.

Versuchsaufbau:

  • Server verlgleichbar mit Managed vServer v31 NVMe
  • Shopware 6 mit Demodaten
    • SHOPWARE_HTTP_CACHE_ENABLED in der .env.local erst auf 0 und dann auf 1 gestellt,
    • Dazwischen jeweils bin/console cache:clear; bin/console theme:compile ausgeführt
  • h2load, mit den Parametern -n1000 -c10 -m10 auf die URL shop-domain.tld/Variantenprodukt/SWDEMO10005.1

Resultate:

SHOPWARE_HTTP_CACHE_ENABLED=0

[...]
finished in 55.71s, 17.95 req/s, 2.80MB/s
requests: 1000 total, 1000 started, 1000 done, 1000 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 1000 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 155.99MB (163570981) total, 314.93KB (322491) headers (space savings 24.48%), 155.50MB (163050000) data
[...]

SHOPWARE_HTTP_CACHE_ENABLED=1

[...]
finished in 11.62s, 86.05 req/s, 13.42MB/s
requests: 1000 total, 1000 started, 1000 done, 1000 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 1000 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 155.91MB (163483082) total, 229.09KB (234592) headers (space savings 24.47%), 155.50MB (163050000) data
[...]

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.

Testen Sie uns 14 Tage kostenlos Jetzt testen