Inhaltsverzeichnis
Shopware 6 Cache: HTTP-Cache Optimierung & Performance
Caching gehört zu den wichtigsten Performance-Faktoren in Shopware 6. Durch das Zwischenspeichern bereits berechneter Inhalte werden Datenbankabfragen, PHP-Prozesse und Serverlast deutlich reduziert. Dadurch verbessern sich Ladezeiten, Core Web Vitals und die Skalierbarkeit des Shops erheblich.
Einführung in die Shopware Cache Optimierung
Warum ist Caching für Shopware wichtig?
Caching gehört zu den wichtigsten Performance-Mechanismen in Shopware 6. Häufig angeforderte Inhalte werden zwischengespeichert, sodass Datenbankabfragen und PHP-Prozesse nicht bei jedem Seitenaufruf erneut ausgeführt werden müssen. Dadurch reagieren Seiten deutlich schneller und die Serverlast sinkt spürbar.
Gerade bei hohem Traffic verhindert ein sauber konfiguriertes Caching-System unnötige Lastspitzen und stabilisiert die gesamte Shop-Infrastruktur. Gleichzeitig profitieren Besucher von kürzeren Ladezeiten und einer insgesamt flüssigeren Nutzererfahrung.
Überblick über Cache-Strategien in Shopware
Shopware 6 nutzt mehrere Caching-Ebenen, die unterschiedliche Aufgaben übernehmen. Dazu zählen unter anderem der PHP-OPcache, der Symfony-basierte HTTP-Cache sowie externe Lösungen wie Redis oder Varnish.
Während OPcache kompilierte PHP-Dateien im Arbeitsspeicher hält, beschleunigt Redis datenbanknahe Prozesse und Sessions. Varnish wiederum kann vollständige HTTP-Antworten direkt ausliefern, ohne dass PHP oder MySQL erneut belastet werden.
Erst das Zusammenspiel dieser Ebenen ermöglicht eine skalierbare und performante Shopware-Architektur.
Auswirkungen auf die Performance
Eine durchdachte Cache-Strategie reduziert die Antwortzeiten eines Shopware-Shops oft erheblich. Inhalte können schneller ausgeliefert werden, während gleichzeitig CPU-Last, Datenbankzugriffe und Speicheroperationen sinken.
Besonders der Full-Page-Cache verbessert die Time to First Byte (TTFB) deutlich, da bereits vorberechnete Inhalte direkt ausgeliefert werden können. Das wirkt sich nicht nur positiv auf die Benutzererfahrung aus, sondern unterstützt auch bessere Core Web Vitals und stabilere Conversion Rates.
Shopware HTTP Cache
Funktionsweise des HTTP Caches
Der Shopware HTTP Cache, basierend auf dem Symfony Reverse Proxy, agiert als intelligenter Zwischenspeicher, der vollständige HTTP-Antworten für bestimmte Routen vorhält, bevor diese an den Browser des Clients gesendet werden. Der Cache wertet HTTP-Header wie „Cache-Control“ und „ETag“ aus, um zu entscheiden, ob eine Ressource neu vom Backend angefordert oder aus dem eigenen Storage ausgeliefert werden kann. Er entlastet das PHP-Backend bei wiederkehrenden Anfragen enorm, da der gesamte Shopware 6 Stack nicht erneut initialisiert werden muss.
Konfiguration des HTTP Caches
Die Konfiguration des HTTP Caches im Shopware 6 Shop erfolgt primär über die `shopware.yaml` oder `config/packages/framework.yaml` Datei, wo Entwickler die Gültigkeitsdauer (TTL) und die zu cachenden Routen präzise definieren. Eine korrekte Cache-Strategie beinhaltet das Setzen relevanter Cache-Tags für Produkte, Kategorien und Product Streams, um eine granulare Invalidation zu ermöglichen. Die Dokumentation von Shopware liefert hierfür detaillierte Anleitungen, wie dieses Feature für das gesamte System optimal eingerichtet wird.
Cache-Invalidierung und -Leeren
Die Cache-Invalidierung ist ein zentraler Bestandteil des Shopware HTTP-Caches, da sie sicherstellt, dass Kunden keine veralteten Produktdaten, Preise oder Lagerbestände sehen. Statt den gesamten Cache zu leeren, arbeitet Shopware 6 mit Cache-Tags, um betroffene Inhalte gezielt zu invalidieren.
Seit neueren Shopware-Versionen erfolgt die Invalidierung zudem verzögert über Scheduled Tasks und die Message Queue. Werden Produkte oder Kategorien aktualisiert, löscht Shopware die betroffenen Seiten nicht sofort aus dem Cache. Stattdessen werden diese zunächst als „invalid“ markiert und anschließend im Hintergrund neu generiert.
Dieses Verfahren reduziert Lastspitzen deutlich und sorgt insbesondere bei größeren Shops für stabilere Cache-Hit-Raten sowie konstant niedrigere Serverlasten.
Das vollständige Leeren des Caches sollte nur in Ausnahmefällen erfolgen, beispielsweise nach Deployments, Plugin-Updates oder größeren Template-Änderungen. Der klassische CLI-Befehl lautet:
bash
php bin/console cache:clearAnschließend kann der Cache wieder vorgewärmt werden:
bash
php bin/console cache:warmupEin automatisiertes tägliches Leeren des gesamten Caches per Cronjob ist bei größeren Shopware-Projekten allerdings meist nicht sinnvoll. Gerade bei umfangreichen Produktkatalogen kann der Neuaufbau des Full-Page-Caches sehr lange dauern und kurzfristig zu deutlich höheren Serverlasten führen.
Optimale Invalidierungs-Intervalle
Für mittelgroße Shops mit etwa 10.000 bis 50.000 Produkten und regelmäßigem Bestellaufkommen hat sich in vielen Projekten ein Invalidierungs-Intervall zwischen 3.600 Sekunden (1 Stunde) und 14.400 Sekunden (4 Stunden) bewährt.
Zu kurze Intervalle erzeugen unnötige Datenbanklast, während zu lange Intervalle dazu führen können, dass Preisänderungen oder Lagerbestände verspätet im Frontend erscheinen.
Die Anpassung erfolgt direkt über die Datenbank:
SQL
UPDATE scheduled_task
SET run_interval = 3600
WHERE name = 'shopware.invalidate_cache';Cache-Invalidierung aus dem Request-Zyklus auslagern
Die eigentliche Cache-Invalidierung sollte grundsätzlich nicht innerhalb des normalen HTTP-Request-Zyklus verarbeitet werden. Erfolgt die Berechnung direkt während einer Benutzeranfrage, können insbesondere bei größeren Produktkatalogen deutliche Lastspitzen sowie erhöhte Antwortzeiten entstehen.
Stattdessen empfiehlt sich die Ausführung über dedizierte CLI-Worker und Scheduled Tasks im Hintergrund. Dadurch bleibt die Storefront auch bei hoher Parallelität stabil und die Cache-Neuberechnung wird asynchron verarbeitet.
Die Scheduled Tasks sollten daher über einen System-Cronjob und nicht über den Browser-Admin ausgeführt werden:
bash
bin/console scheduled-task:run --time-limit=240 --memory-limit=512MZusätzlich empfiehlt sich die Aktivierung der verzögerten Cache-Invalidierung:
env
SHOPWARE_HTTP_CACHE_DELAYED_INVALIDATION=1Dadurch werden Cache-Neuberechnungen asynchron verarbeitet, was die Antwortzeiten bei hoher Parallelität deutlich stabilisiert.
HTTP-Cache-Lebensdauer (TTL)
Die Standard-TTL des Shopware HTTP-Caches beträgt 7.200 Sekunden (2 Stunden). Nach Ablauf dieser Zeit muss die Seite beim nächsten Aufruf vollständig neu generiert werden.
Da Shopware bereits ein intelligentes Tagging- und Invalidierungs-System besitzt, empfiehlt es sich in Produktionsumgebungen häufig, die TTL deutlich höher anzusetzen.
Bis einschließlich Shopware 6.7 erfolgte die Konfiguration global über die .env:
env
Bis Shopware 6.7
# HTTP-Cache aktivieren
SHOPWARE_HTTP_CACHE_ENABLED=1
# Lebensdauer auf 24 Stunden erhöhen (86400 Sekunden)
SHOPWARE_HTTP_DEFAULT_TTL=86400Neues Cache-System ab Shopware 6.8
Ab Shopware 6.8 wurde das HTTP-Caching grundlegend erweitert. Die Cache-Lebensdauer wird nicht mehr global über die .env gesteuert, sondern granular über Policies auf Route- und Bereichsebene definiert.
Zusätzlich führt Shopware ein neues Opt-out-Prinzip ein. Durch das sw-cache-hash-Cookie bleibt der Cache nun standardmäßig auch für eingeloggte Nutzer oder gefüllte Warenkörbe aktiv.
Wichtige neue Cache-Control-Direktiven sind:
- s_maxage: Definiert die maximale Lebensdauer im HTTP-Cache oder Reverse Proxy.
- stale_while_revalidate: Ermöglicht die Auslieferung veralteter Inhalte, während der Cache im Hintergrund neu aufgebaut wird.
- must_revalidate: Erzwingt eine erneute Validierung beim Browser-Cache.
Die Konfiguration erfolgt über die shopware.yaml:
yaml
# config/packages/shopware.yaml
shopware:
http_cache:
# 1. Richtlinien definieren
policies:
# Beispiel für eine lange Lebensdauer (z.B. 24 Stunden)
mein_shop_policy:
headers:
cache_control:
public: true
max_age: 0
must_revalidate: true
s_maxage: 86400 # Cache-Lebensdauer in Sekunden (hier 24 Std)
stale_while_revalidate: 86400
stale_if_error: 7200
# 2. Die Richtlinie standardmäßig zuweisen
default_policies:
storefront:
cacheable: mein_shop_policyVarnish Cache und seine Rolle
Einrichtung von Varnish für Shopware
Die Einrichtung von Varnish als Reverse Proxy vor Shopware 6 erfordert eine präzise Konfiguration der VCL (Varnish Configuration Language). Varnish verarbeitet eingehende HTTP-Anfragen bereits vor dem eigentlichen Shopware-Backend und entscheidet, ob Inhalte direkt aus dem Cache ausgeliefert oder an PHP und den Webserver weitergeleitet werden.
Typischerweise werden statische Assets sowie vollständige HTML-Seiten gecacht, während dynamische Bereiche wie Checkout, Kundenkonto oder Warenkorb vom Caching ausgeschlossen werden müssen. Zusätzlich spielen Cache-Tags, Purge-Requests und ESI-Blöcke eine wichtige Rolle für eine saubere Cache-Invalidierung.
Eine korrekt konfigurierte VCL reduziert die Backend-Last und somit die Speicherzugriffe und CPU erheblich und verbessert die Skalierbarkeit und die Ladezeit des Shops.
Beispiel einer einfachen Varnish-VCL
Die konkrete Varnish-Konfiguration hängt immer stark von der Infrastruktur, eingesetzten Plugins, individuellen Session-Logiken und dem Traffic-Profil des Shops ab. Dennoch zeigt das folgende Beispiel eine typische Grundkonfiguration für Shopware 6:
VCL
sub vcl_recv {
# Kein Cache für Checkout und Kundenkonto
if (req.url ~ "^/checkout" ||
req.url ~ "^/account" ||
req.url ~ "^/widgets") {
return (pass);
}
# Nur GET und HEAD cachen
if (req.method != "GET" &&
req.method != "HEAD") {
return (pass);
}
return (hash);
}
sub vcl_backend_response {
# Standard TTL
set beresp.ttl = 24h;
}In produktiven Shopware-Umgebungen werden zusätzlich häufig individuelle Regeln für folgende Bereiche implementiert:
- Cache-Tags
- PURGE-Requests
- ESI-Blöcke
- Cookies
- Warenkorb-Handling
- GeoIP-Logiken
- personalisierte Inhalte
- Bot-Traffic
- CDN-Integration
Gerade bei größeren Shopware-Projekten sollte die VCL deshalb immer individuell auf Infrastruktur, Hosting-Setup und Plugin-Landschaft abgestimmt werden.
Reverse Proxy Cache: Vorteile und Herausforderungen
Gerade bei Shops mit hohem Traffic stößt der interne Shopware HTTP-Cache früher oder später an Grenzen. In solchen Szenarien wird Varnish besonders relevant, da Requests verarbeitet werden, bevor überhaupt PHP-Prozesse oder Datenbankabfragen entstehen.
Dadurch sinken sowohl die Serverlast als auch die Antwortzeiten deutlich. Besonders bei stark frequentierten Kategorie- oder Produktseiten lassen sich mit Varnish erheblich bessere Cache-Hit-Raten erzielen.
Die größte Herausforderung liegt allerdings in der Cache-Invalidierung. Änderungen an Produkten, Preisen oder CMS-Inhalten müssen gezielt per Purge-Requests oder über Cache-Tags an Varnish kommuniziert werden, damit keine veralteten Inhalte ausgeliefert werden.
Cache-Statistiken und Monitoring
Ein effektives Monitoring der Varnish-Cache-Statistiken ist unerlässlich, um die Effizienz des Caching zu bewerten und potenzielle Engpässe zu identifizieren. Tools wie `varnishstat` oder Integrationen in Monitoring-Lösungen wie Prometheus liefern detaillierte Einblicke in Cache-Hits, Misses und Evictions, was Aufschluss über die tatsächliche Optimierung gibt. Diese Daten ermöglichen es Shop-Betreibern und Entwicklern, die VCL-Konfiguration kontinuierlich zu optimieren und die Cache-Strategie an die spezifischen Anforderungen des Shopware-Shops anzupassen.
Redis als Objekt-Cache
Konfiguration von Redis in Shopware 6
In vielen großen Shopware-Projekten wird Redis genutzt, um Datenbankabfragen und Session-Locks deutlich zu reduzieren. Vor allem bei hoher Parallelität stößt das Dateisystem-basierte Session-Handling schnell an Grenzen. Die Konfiguration erfolgt über die `config/packages/shopware.yaml`, wo der Redis-Adapter für das Caching und Sessions definiert wird, typischerweise mit einem DSN wie `redis://localhost:6379`. Ein sauber implementiertes Redis erhöht die Geschwindigkeit des Shopware-Shops erheblich.
Beispiel einer Redis-Konfiguration für Shopware 6
Für Shopware 6 wird Redis häufig sowohl als Objekt-Cache als auch für Sessions genutzt. Eine typische Redis-Anbindung in der shopware.yaml kann beispielsweise so aussehen:
yaml
shopware:
cache:
invalidation:
delay: 3600
framework:
cache:
app: cache.adapter.redis
default_redis_provider: 'redis://127.0.0.1:6379'
session:
handler_id: Redis
save_path: "tcp://127.0.0.1:6379"Wichtig ist dabei, Redis in Produktionsumgebungen niemals ohne Speicherbegrenzung zu betreiben. Ohne ein definiertes maxmemory kann Redis bei hoher Last oder fehlerhaften Cache-Invalidierungen den gesamten verfügbaren Arbeitsspeicher des Servers belegen.
Eine typische Basis-Konfiguration in der redis.conf sieht beispielsweise so aus:
INI
maxmemory 2gb
maxmemory-policy allkeys-lruDie allkeys-lru-Strategie sorgt dafür, dass ältere Cache-Einträge automatisch entfernt werden, sobald das definierte Speicherlimit erreicht wird.
Die optimale Speichergröße hängt stark von der Shopgröße sowie von folgenden Faktoren ab:
- Produktanzahl
- gleichzeitige Nutzer
- Session-Aufkommen
- eingesetzte Plugins
- HTTP-Cache-Hit-Rate
- Anzahl der Sales Channels
Gerade bei größeren Shopware-Projekten sollte die Redis-Konfiguration daher regelmäßig überwacht und an die tatsächliche Last angepasst werden.
Redis Sessions und deren Optimierung
Die Auslagerung von PHP-Sessions in Redis entlastet das Dateisystem des Servers und beschleunigt die Verarbeitung von Benutzeranfragen, insbesondere bei hohem Traffic, was die Skalierbarkeit des Systems massiv verbessert. Standardmäßig speichert PHP Sessions auf der Festplatte, was bei vielen gleichzeitigen Nutzern zu I/O-Engpässen führt; Redis bietet hier schnelle Zugriffszeiten. Diese Optimierung ist entscheidend für Shops mit 10.000 oder mehr gleichzeitigen Besuchern.
Vergleich zwischen Redis und Varnish
Während Redis als Objekt-Cache und für Sessions auf der Anwendungsebene agiert und datenbanknahe Abfragen beschleunigt, fungiert Varnish als Reverse Proxy HTTP Cache auf Netzwerkebene, der vollständige Seiten liefert. Redis beschleunigt die Backend-Verarbeitung von Shopware, während Varnish die Anzahl der Anfragen an das Backend minimiert. Beide Technologien ergänzen sich; Varnish bedient den „schnellen“ Cache für statische Inhalte und Redis den „dynamischen“ für zwischengespeicherte Daten.
Full Page Cache und Cache Warmup
Implementierung des Full Page Cache
Der Full Page Cache in Shopware 6, oft in Kombination mit Varnish oder dem Symfony HTTP Cache realisiert, speichert die vollständig gerenderten HTML-Seiten für spezifische Routen, um bei wiederkehrenden Anfragen eine extrem schnelle Auslieferung ohne erneute PHP-Verarbeitung zu ermöglichen. Diese intensive Caching-Strategie ist besonders effektiv für nicht-personalisierte Inhalte wie Produktlisten oder Kategorieseiten. Die Konfiguration erfolgt über HTTP-Header sowie die in Shopware integrierten ESI- und Cache-Tags.
Effekte auf Core Web Vitals
Eine effektive Full Page Cache-Implementierung und präzise Cache Warmup Strategien wirken sich direkt und signifikant auf die Core Web Vitals aus, indem sie die Largest Contentful Paint (LCP) und First Input Delay (FID) Werte drastisch verbessern.
Durch die Bereitstellung von vorgenerierten Inhalten werden die Antwortzeiten des Servers minimiert und die Rendering-Geschwindigkeit erhöht, was zu einer besseren User Experience und einer positiven Bewertung durch Suchmaschinen führt.
Skalierung großer Shops
Datenbankentlastung durch Caching
Caching entlastet die Datenbank in großen Shopware-Shops erheblich, indem es die Notwendigkeit wiederholter, ressourcenintensiver Datenbankabfragen eliminiert, da häufig angeforderte Daten aus dem schnelleren Cache bereitgestellt werden. Objekt-Caches wie Redis halten Produkt-, Kategorie- und Konfigurationsdaten im Arbeitsspeicher vor, was die Anzahl der SQL-Abfragen reduziert. Das ist entscheidend für Shops mit hohen Datenmengen und komplexen Beziehungen, da es die Geschwindigkeit und Stabilität sichert.
Optimierung der Serverlast
Durch den umfassenden Einsatz von HTTP-Caches, Reverse Proxys wie Varnish und Objekt-Caches wie Redis wird die PHP-Auslastung und die allgemeine Serverlast in Shopware 6 Umgebungen erheblich reduziert. Zwischengespeicherte Inhalte minimieren die Anzahl der Anfragen, die das PHP-Backend erreichen, wodurch weniger CPU-Zyklen und Arbeitsspeicher alloziert werden müssen. Diese Optimierung erlaubt es dem Shop, hohem Traffic standzuhalten und gleichzeitig schnelle Ladezeiten zu garantieren.
Beispielhafter Aufbau eines Shopware-Clusters für hohe Verfügbarkeit und maximale Performance
- 2 Loadbalancer
- 2 Varnish-Server
- 2 Elasticsearch/Redis-Server
- 2 Webserver
- 2 MySQL-Server (z. B. Galera Cluster oder Primary/Primary-Replikation)
- separates Backupsystem
- Optional: Fileserver/NAS für den gemeinsamen Media-Ordner
- Optional: Backend/Administration-Server
Wichtig ist, dass sämtliche produktiven Systeme — mit Ausnahme des Backupservers — über interne Netzwerkverbindungen kommunizieren. Idealerweise erfolgt dies über ein separates internes Netzwerk oder eine zweite Netzwerkkarte. Alternativ sollten sich alle Systeme mindestens im selben lokalen Netzwerksegment befinden, damit die Kommunikation ohne zusätzliche Router-Hops erfolgt. Dadurch werden Latenzen reduziert und die Gesamtperformance verbessert.
Backup-Strategie
Die optimale Backup-Strategie hängt stark vom Bestellvolumen und der Änderungsfrequenz der Artikeldaten ab.
Für mittlere Shopware-Shops haben sich folgende Intervalle bewährt:
- Datenbank-Backups: tagsüber alle 2 Stunden, nachts alle 6 Stunden (Aufbewahrung: 7 Tage)
- Dateien/Webroot/Media: 2× täglich (Aufbewahrung: 30 Tage)
- Infrastruktur-Konfigurationen (z. B. Loadbalancer/Varnish): nach Änderungen, zusätzlich monatliche Sicherung.

In der Praxis reicht meist ein konsistentes Backup von Datenbank und Web-/Media-Daten vollständig aus. Dienste wie Redis, Varnish oder Elasticsearch müssen normalerweise nicht separat gesichert werden, da ihre Daten nach einem Neustart automatisiert neu aufgebaut beziehungsweise synchronisiert werden.
Hosting-Optionen: Shopware Cloud vs. eigener Server
Die Wahl zwischen Shopware Cloud und einem eigenen Server beeinflusst maßgeblich die Skalierbarkeit und Cache-Optimierung eines Shopware-Shops. Die Cloud bietet vorkonfigurierte, oft automatisch skalierende Caching-Lösungen, während ein eigener Server volle Kontrolle über jede Cache-Ebene und Infrastruktur ermöglicht. Shopware Cloud managt die Infrastruktur und das Caching automatisch, was den Administrationsaufwand reduziert. Ein eigener Server jedoch bietet die Flexibilität, Redis, Varnish und OPCache präzise an spezifische Anforderungen anzupassen, was für eine maximale Optimierung unerlässlich ist.
Best Practices für die Cache-Optimierung
Für eine effektive Cache-Optimierung in Shopware 6 empfiehlt es sich, eine mehrstufige Cache-Strategie zu implementieren, die Redis als Objekt-Cache, Varnish als Full Page Cache und den Shopware HTTP Cache kombiniert. Das Setzen präziser Cache-Tags für eine granulare Invalidierung, die Automatisierung von Cache-Warmup-Prozessen via Cronjobs und das regelmäßige Monitoring der Cache-Statistiken sichern eine dauerhaft hohe Geschwindigkeit. Reduzieren Sie PHP-Prozessierungen und Datenbankabfragen durch konsistentes Caching.
Monitoring und Analyse
Tools zur Überwachung der Cache-Performance
Die kontinuierliche Überwachung der Cache-Performance ist essenziell, um Engpässe frühzeitig zu erkennen und die Stabilität eines Shopware-Systems dauerhaft sicherzustellen. Gerade bei größeren Shops mit hoher Parallelität entscheidet ein sauberes Monitoring oft darüber, ob ein Shop auch unter Last stabil performant bleibt.
Abhängig von der eingesetzten Infrastruktur kommen dabei unterschiedliche Werkzeuge zum Einsatz.
Varnish Monitoring mit varnishstat
Das wichtigste Analysewerkzeug für Varnish ist varnishstat. Es liefert in Echtzeit Informationen über Cache-Hits, Misses, Backend-Requests, Speicherverbrauch und Queue-Auslastungen.
Besonders relevante Kennzahlen sind:
| Wert | Bedeutung |
|---|---|
cache_hit | Anfrage konnte direkt aus dem Varnish-Cache beantwortet werden |
cache_miss | Inhalt musste vom Backend neu geladen werden |
backend_fail | Backend war nicht erreichbar oder lieferte Fehler |
n_lru_nuked | Alte Cache-Objekte mussten wegen Speichermangel entfernt werden |
threads_failed | Varnish konnte keine neuen Worker-Threads erzeugen |
Ein typischer Aufruf:
bash
varnishstat -1Für produktive Shopware-Systeme gelten dauerhaft niedrige Cache-Hit-Raten meist als Warnsignal. Liegt die Hit-Rate dauerhaft unter etwa 70 %, deutet dies häufig auf folgende Probleme hin:
- Falsch konfigurierte Cookies
- Unnötige
return(pass)-Regeln - Zu aggressive Cache-Invalidierungen
- Fehlende xkey-Softpurges
- Plugins mit personalisierten Inhalten
Gerade bei stark frequentierten Kategorie-Seiten sollten Cache-Hit-Raten von deutlich über 90 % erreichbar sein.
Analyse von HTTP-Headern
Sehr viele Cache-Probleme lassen sich bereits direkt im Browser analysieren. Über die Developer-Tools (F12) können HTTP-Header geprüft werden.
Wichtige Header in Shopware-/Varnish-Umgebungen:
| Header | Bedeutung |
|---|---|
x-cache | HIT oder MISS im Varnish |
cache-control | Definiert TTL und Cache-Regeln |
sw-cache-hash | Shopware Cache-Kontext |
xkey | Zugeordnete Cache-Tags |
age | Alter des Cache-Objekts |
Ein typisches Beispiel:
html
x-cache: HIT
cache-control: public, s-maxage=86400
age: 5321Dies bedeutet:
- Seite wurde erfolgreich aus dem Varnish ausgeliefert
- TTL beträgt 24 Stunden
- Objekt liegt bereits seit 5321 Sekunden im Cache
- Durch eine kleine Anpassung in der Varnish
default.vcllassen sich zusätzlich auch die Anzahl der Hits mit anzeigen
vcl
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
set resp.http.X-Cache-Hits = obj.hits;
} else {
set resp.http.X-Cache = "MISS";
}
}Taucht dagegen permanent MISS auf, obwohl die Seite cachebar sein sollte, liegt meist ein Cookie-, Session- oder Proxy-Problem vor.
Redis-Monitoring und Speicheranalyse
Redis sollte regelmäßig hinsichtlich Speicherverbrauch, Evictions und Antwortzeiten überwacht werden.
Wichtige Befehle:
bash
redis-cli info memoryzeigt unter anderem:
- aktuellen RAM-Verbrauch
- maxmemory-Limits
- Fragmentierung
- ausgelagerte Keys
Ebenso wichtig:
bash
redis-cli info statsHier lassen sich unter anderem folgende kritische Werte erkennen:
| Wert | Bedeutung |
|---|---|
evicted_keys | Anzahl gelöschter Keys wegen Speichermangel |
keyspace_hits | erfolgreiche Cache-Zugriffe |
keyspace_misses | fehlgeschlagene Cache-Zugriffe |
Steigende evicted_keys sind meist ein klares Zeichen dafür, dass:
- das
maxmemoryzu klein gewählt wurde - Sessions und Cache gemeinsam betrieben werden
- die falsche Eviction-Policy aktiv ist
Gerade bei Shopware sollte Redis niemals unbegrenzt wachsen dürfen.
PHP OPcache überwachen
Auch der PHP-OPcache gehört zu den wichtigsten Performance-Faktoren in Shopware 6.
Der aktuelle Status lässt sich beispielsweise über:
bash
php -i | grep opcacheoder über kleine Status-Skripte auslesen.
Kritische Kennzahlen:
| Wert | Bedeutung |
|---|---|
opcache_hit_rate | Trefferquote des OPcache |
memory_consumption | belegter Shared Memory |
wasted_memory | fragmentierter Speicher |
num_cached_scripts | gecachte PHP-Dateien |
Gerade bei großen Shopware-Installationen mit vielen Plugins kommt es häufig vor, dass:
opcache.max_accelerated_fileszu klein ist- Scripts permanent neu geladen werden
- die Hit-Rate stark sinkt
In produktiven Umgebungen sollte die OPcache-Hit-Rate dauerhaft nahe 100 % liegen.
Langfristiges Monitoring mit Prometheus & Grafana
Bei größeren Shopware-Clustern empfiehlt sich zusätzlich ein zentrales Monitoring über:
- Prometheus
- Grafana
- Netdata
- Zabbix
- Datadog
- New Relic
- check_mk
Dadurch lassen sich unter anderem folgende Werte dauerhaft visualisieren:
- Cache-Hit-Raten
- Redis-RAM-Auslastung
- MySQL-Query-Zeiten
- PHP-FPM-Auslastung
- Queue-Laufzeiten
- TTFB
- Varnish Backend Fetches
- CPU-Load der Webserver
Besonders hilfreich sind historische Vergleiche nach:
- Deployments
- Plugin-Updates
- Shopware-Updates
- Marketing-Kampagnen
- Black-Friday-Lastspitzen
So lassen sich Performance-Probleme oft bereits erkennen, bevor Kunden sie bemerken.
Typische Praxisprobleme im Monitoring
In realen Shopware-Projekten zeigen sich häufig wiederkehrende Muster:
Plötzlich sinkende Cache-Hit-Rate
Oft verursacht durch:
- neue Plugins
- Tracking-Skripte
- falsch gesetzte Cookies
- Session-Starts auf jeder Seite
Hohe Redis-Evictions
Häufig verursacht durch:
- fehlendes
maxmemory - gemeinsame Nutzung für Sessions und Cache
- die falsche Eviction-Policy
Varnish Backend Fetch Spikes
Typische Ursachen:
- fehlendes Cache-Warming
- harte Purges statt Softpurges
- zu kurze TTLs
- fehlerhafte Invalidierung
Hohe TTFB trotz Varnish
Meist verursacht durch:
- uncached AJAX-Requests
- langsame Elasticsearch-Abfragen
- blockierende Plugins
- überlastete MySQL-Server
Ein professionelles Monitoring ermöglicht es, solche Probleme frühzeitig zu identifizieren und gezielt gegenzusteuern, bevor die Performance oder Stabilität des Shops leidet.
FAQ Typische Cache-Probleme und Cache Optimierung
Zu den häufigsten Fragen rund um Cache-Strategien in Shopware 6 gehören Aspekte wie „Welche Caches sind für meinen Shop relevant?“, „Wie verhindere ich veraltete Inhalte?“ und „Wie skaliere ich das Caching bei hohem Traffic?“. Shop-Betreiber und Developer suchen oft nach Best Practices für die Konfiguration von Redis, Varnish und dem HTTP Cache, sowie nach Methoden zur effektiven Invalidierung und zum Cache Warmup. Diese Fragen fokussieren auf die Optimierung der Ladezeiten und die Entlastung der Server.
Warum kann eine falsche Redis Eviction-Policy Shopware 6 lahmlegen?
Wird Redis mit der Standard-Policy noeviction betrieben, kann Shopware bei vollem Cache-Speicher keine neuen Cache-Einträge mehr schreiben. Dadurch entstehen teilweise massive Performance-Probleme bis hin zu kompletten Storefront-Ausfällen. Für flüchtige Cache-Daten empfiehlt sich daher die Policy volatile-lru, damit ältere Einträge automatisch entfernt werden können.
Redis: Warum sollten Shopware-Cache und Sessions nicht in derselben Redis-Instanz liegen?
Werden flüchtige Cache-Daten und persistente Sessions gemeinsam in einer Redis-Instanz gespeichert, können unter Speicherdruck wichtige Warenkorb- oder Session-Keys gelöscht werden. Dies führt häufig zu Checkout-Abbrüchen oder verlorenen Kundensitzungen. Für produktive Shopware-Umgebungen empfiehlt sich daher die Trennung von Cache- und Session-Daten auf separate Redis-Instanzen oder unterschiedliche Datenbanken mit eigenen Speicherregeln.
Redis: Warum kann Redis-Persistenz die Performance von Shopware verschlechtern?
Werden für reine Shopware-Cache-Instanzen Persistenz-Funktionen wie RDB-Snapshots oder Append-Only-Files (AOF) aktiviert, muss Redis Schreibzugriffe zusätzlich auf die Festplatte sichern. Dadurch entstehen unnötige I/O-Latenzen und die Cache-Performance verschlechtert sich deutlich. Für flüchtige HTTP- und Applikations-Caches empfiehlt es sich daher, die Persistenz in Redis zu deaktivieren.
Einstellungen in der redis.conf
ini
# RDB-Snapshots deaktivieren
save ""
# Append Only File deaktivieren
appendonly noappendonly no und save „“ deaktivieren Festplatten-Persistenz vollständig.
- Diese Konfiguration sollte nur für flüchtige Cache-Daten genutzt werden.
- Sessions/Warenkörbe idealerweise auf einer separaten Redis-Instanz betreiben.
Warum reicht cache:clear in Shopware 6 oft nicht aus?
Der CLI-Befehl php bin/console cache:clear leert häufig nur den lokalen Symfony-Dateisystem-Cache. Externe Cache-Systeme wie Redis oder Varnish behalten ihre Daten jedoch weiterhin im Speicher. Dadurch können veraltete Inhalte, Preise oder Cache-Inkonsistenzen entstehen. In produktiven Shopware-Umgebungen sollten daher zusätzlich HTTP-Cache-Invalidierungen, Redis-Clears oder gezielte Varnish-Purges durchgeführt werden.
Warum ist Cache-Warming nach einem Cache-Clear wichtig?
Wird der Shopware-Cache nach Updates oder Deployments geleert, müssen Seiten und Daten zunächst vollständig neu generiert werden. Ohne Cache-Warming entstehen beim ersten Seitenaufruf oft deutlich höhere Ladezeiten, da Shopware Inhalte live aus der Datenbank berechnet und kompiliert. Deshalb sollte der Cache nach einem Clear automatisiert über cache:warmup oder Hintergrund-Worker vorgewärmt werden.
Varnish: Warum sollte die Varnish-Konfiguration nur mit ausreichenden Kenntnissen vorgenommen werden?
Eine fehlerhafte Varnish-Konfiguration kann dazu führen, dass personalisierte Inhalte oder Kundensitzungen unbeabsichtigt zwischengespeichert werden. Im schlimmsten Fall sehen Besucher fremde Warenkörbe, Kundendaten oder Account-Informationen. Besonders Session-Cookies und dynamische Shopware-Bereiche müssen deshalb konsequent vom HTTP-Cache ausgeschlossen werden. Für produktive Systeme sollten ausschließlich aktuelle Shopware-VCL-Vorlagen, getestete Cache-Regeln und eine saubere Invalidierungsstrategie verwendet werden. Bei komplexeren Shopware-Infrastrukturen empfiehlt sich die Konfiguration durch erfahrene Administratoren oder spezialisierte Shopware-Hosting-Partner.
Varnish: „503 Backend Fetch Failed“ durch Header-Limits
Durch das erweiterte Cache-Tagging von Shopware können HTTP-Header (z. B. X-Cache-Tags oder xkey) sehr groß werden. Reichen die Standard-Buffer von Varnish nicht aus, bricht die Backend-Kommunikation mit einem „503 Backend Fetch Failed“ ab.
In produktiven Shopware-Umgebungen sollten die Parameter http_resp_hdr_len und http_resp_size daher meist auf 64k bis 128k erhöht werden.
Varnish: Fehlende oder fehlerhafte Cache-Invalidierung
Damit Änderungen an Produkten, Preisen oder Lagerbeständen korrekt im Frontend erscheinen, muss Shopware Invalidierungs-Requests an Varnish senden können. Fehlen die Reverse-Proxy-Einstellungen oder sind IP-Adressen bzw. Ports falsch konfiguriert, bleiben veraltete Inhalte trotz Backend-Änderungen weiterhin im Cache.
Prüfen Sie daher die Konfiguration unter http_cache.reverse_proxy in der shopware.yaml und hinterlegen Sie alle Varnish-Instanzen mit den korrekten Hosts und Ports. Insbesondere ab Shopware 6.6 wurden Teile der Reverse-Proxy-Konfiguration angepasst.
Varnish: Falsche Trusted-Proxies-Konfiguration
Läuft Varnish als Reverse Proxy vor Apache oder Nginx, muss Shopware dem Proxy vertrauen. Fehlt die Konfiguration über TRUSTED_PROXIES, erkennt Symfony nicht mehr die echte Besucher-IP, sondern nur noch die IP-Adresse des Varnish-Servers.
Dadurch funktionieren Geo-IP-Auswertungen, Sicherheitsregeln oder Rate-Limits häufig nicht mehr korrekt. Zudem erscheinen im Shopware-Backend alle Bestellungen mit derselben IP-Adresse.
Hinterlegen Sie daher die IP-Adresse oder das interne Netzwerk Ihres Varnish-Servers in der .env.local als vertrauenswürdigen Proxy:
env
# Lokaler Varnish
TRUSTED_PROXIES=127.0.0.1,::1
# Separater Varnish-Server
TRUSTED_PROXIES=192.168.1.50
# Docker-/dynamische Netzwerke
TRUSTED_PROXIES=127.0.0.1,REMOTE_ADDR
Zusätzlich muss Varnish die ursprüngliche Client-IP per X-Forwarded-For weiterreichen. Auch Apache oder Nginx müssen diese Header korrekt verarbeiten, damit Shopware die tatsächliche Kunden-IP erkennt.
Varnish: Fehlende Soft-Purges verursachen unnötige Lastspitzen
Ohne XKey-Unterstützung entfernt Varnish bei Produktänderungen häufig komplette Seiten sofort aus dem Cache („Hard Purge“). Der nächste Besucher muss die Seite dadurch vollständig neu über PHP und die Datenbank generieren lassen, was insbesondere bei hohem Traffic zu deutlich höheren Ladezeiten führt.
Für produktive Shopware-Umgebungen empfiehlt sich daher die Nutzung von Soft-Purges über das xkey-Modul. Dabei bleiben Cache-Inhalte zunächst verfügbar, während Varnish die betroffenen Seiten im Hintergrund aktualisiert.
Aktivieren Sie hierfür das mod_xkey-Modul in Varnish und setzen Sie in der Shopware-Konfiguration:
YAML
shopware:
http_cache:
reverse_proxy:
use_varnish_xkey: true
Gerade bei größeren Shopware-Projekten mit vielen Produktänderungen verbessert dies die Cache-Hit-Rate deutlich und reduziert Lastspitzen nach Cache-Invalidierungen erheblich.
OPcache: Zu geringer Shared Memory bremst Shopware aus
Shopware 6 lädt zusammen mit Symfony, Composer-Abhängigkeiten und Plugins zehntausende PHP-Dateien. Ist der verfügbare OPcache-Speicher zu klein dimensioniert, kann PHP viele vorkompilierte Skripte nicht dauerhaft im Shared Memory halten und muss diese regelmäßig erneut von der Festplatte laden.
Besonders bei größeren Shopware-Installationen steigen dadurch die Ladezeiten und die Time to First Byte (TTFB) spürbar an. Standardwerte von 64 MB oder 128 MB reichen für produktive Systeme meist nicht mehr aus.
Für produktive Shopware-Umgebungen empfiehlt sich daher eine deutlich höhere Speicherzuweisung in der php.ini:
ini
opcache.memory_consumption=512
Kleinere Shops können häufig bereits mit 256 MB stabil betrieben werden. Bei größeren Plugin-Landschaften, mehreren Sales-Channels oder Enterprise-Hosting-Umgebungen sind jedoch 512 MB oder mehr oft sinnvoll.
OPcache: Zu niedriger Wert für max_accelerated_files
Shopware 6 besteht zusammen mit Symfony, Composer-Abhängigkeiten und installierten Plugins häufig aus mehreren zehntausend PHP-Dateien. Ist die maximale Anzahl cachebarer Dateien im OPcache zu niedrig angesetzt, kann PHP viele Klassen nicht mehr im Shared Memory halten.
Sobald das Limit erreicht wird, fallen Teile des Shops aus dem Cache und müssen erneut von der Festplatte geladen und kompiliert werden. Dadurch steigt insbesondere die Time to First Byte (TTFB) bei stark frequentierten Shops deutlich an.
Die Standardwerte vieler Hosting-Umgebungen — häufig nur 10000 Dateien — reichen für moderne Shopware-Installationen meist nicht mehr aus.
Für produktive Shopware-Systeme empfiehlt sich daher eine deutlich höhere Konfiguration in der php.ini:
ini
opcache.max_accelerated_files=60000
Gerade größere Enterprise-Installationen mit vielen Plugins, individuellen Erweiterungen oder mehreren Sales-Channels profitieren hiervon spürbar durch stabilere Ladezeiten und einer optimierten PHP-Performance. Für komplexe Umgebungen empfiehlt sich ein professionell abgestimmtes Shopware Enterprise Hosting.
OPcache: Aktivierte Datei-Validierung im Produktivbetrieb (opcache.validate_timestamps)
ini
opcache.validate_timestamps=0
Dadurch verbleiben kompilierte PHP-Dateien dauerhaft im Shared Memory des OPcache und müssen nicht bei jedem Seitenaufruf erneut geprüft werden. Gerade performante Shopware Enterprise Hosting Umgebungen profitieren hiervon spürbar bei hoher Last und vielen parallelen Requests. Wichtig: Nach Shopware-Updates, Plugin-Installationen oder Deployments muss der OPcache anschließend manuell geleert werden — beispielsweise per php-fpm-Reload oder über opcache_reset() — da Änderungen sonst nicht sofort aktiv werden. OPcache: Zu kleiner Interned Strings Buffer
ini
opcache.interned_strings_buffer=32
Gerade größere Shopware-Installationen mit vielen Plugins, Composer-Abhängigkeiten und umfangreichen Symfony-Containern profitieren dadurch von einer deutlich effizienteren Shared-Memory-Nutzung und stabilerer Performance unter Last. Elasticsearch: Zu viele oder zu kleine Shards („Oversharding“)
Jeder Elasticsearch-Shard benötigt eigenen Arbeitsspeicher, CPU-Ressourcen und Verwaltungsaufwand im Cluster. Werden zu viele kleine Shards verwendet, steigt der Overhead erheblich und die Performance des gesamten Suchclusters verschlechtert sich spürbar.
Besonders bei größeren Shopware-Installationen führen viele kleine Indizes häufig zu erhöhtem Heap-Verbrauch, längeren Suchzeiten und instabilen Cluster-Zuständen. Statt die Suche zu beschleunigen, erzeugt Oversharding zusätzliche Last auf allen Elasticsearch-Knoten.
Für produktive Shopware-Umgebungen empfiehlt sich daher eine sinnvolle Shard-Größe von etwa 10 GB bis 50 GB pro Shard. Kleine Produktkataloge benötigen oft deutlich weniger Shards als standardmäßig angenommen.
Zusätzlich sollten alte oder selten genutzte Indizes regelmäßig optimiert oder zusammengeführt werden — beispielsweise über Index Lifecycle Management (ILM). Dadurch bleiben Heap-Auslastung, Cluster-State und Suchperformance langfristig stabil.
Elasticsearch: Falsche Java-Heap-Speicher-Konfiguration
Fehler: Der Java-Heap von Elasticsearch ist entweder zu klein dimensioniert oder überschreitet die kritische Grenze von etwa 32 GB. Dadurch kommt es entweder zu OutOfMemory-Fehlern oder zu deutlichen Performance-Verlusten durch deaktivierte „Compressed OOPs“.
Auswirkung: Ein zu kleiner Heap führt unter Last zu Instabilitäten, langsamen Suchanfragen oder kompletten Abstürzen des Elasticsearch-Clusters. Ein zu großer Heap verschlechtert hingegen die Speicheradressierung der JVM und reduziert die Performance trotz höherem RAM-Einsatz.
Lösung: Setzen Sie Xms und Xmx in der jvm.options identisch auf etwa 50 % des verfügbaren Arbeitsspeichers, jedoch maximal auf 30–31 GB. Der verbleibende RAM sollte dem Betriebssystem für den Dateisystem-Cache zur Verfügung stehen, da Elasticsearch stark davon profitiert.
bash
# Beispiel für 64 GB RAM
-Xms30g
-Xmx30g
Gerade bei großen Shopware-Installationen mit Elasticsearch, Redis und Varnish entscheidet die korrekte Speicheraufteilung maßgeblich über Stabilität und Suchperformance. Bei komplexen Cluster- oder High-Traffic-Umgebungen empfiehlt sich eine professionelle Infrastrukturplanung durch einen erfahrenen Shopware-Hosting-Partner.
Wie kann man die Cache-Leistung in Shopware 6 testen?
Die Cache-Leistung in Shopware 6 lässt sich mit verschiedenen Analyse- und Lasttest-Tools zuverlässig überprüfen. Besonders wichtig sind dabei Kennzahlen wie Ladezeiten, Time to First Byte (TTFB), Cache-Hit-Rate und die Stabilität unter hoher Last.
Für erste Performance-Analysen eignen sich Tools wie Google Lighthouse, GTmetrix oder WebPageTest. Diese messen unter anderem Core Web Vitals, Renderzeiten und Serverantwortzeiten. Sinnvoll ist dabei ein Vergleich zwischen „kaltem Cache“ (direkt nach dem Cache-Clear) und „warmem Cache“.
Für technische Cache-Analysen bieten sich zusätzliche Tools an:
varnishstat und varnishlog zur Überwachung von Varnish-Hit-Raten und Backend-Requests
bash
# Varnish: Echtzeit-Statistiken anzeigen
varnishstat
# Nur wichtige Cache-Metriken filtern
varnishstat -f MAIN.cache_hit,MAIN.cache_miss,MAIN.backend_fail
# Cache-Hit-Rate live beobachten
watch -n1 "varnishstat -f MAIN.cache_hit,MAIN.cache_miss"
# Backend-Fehler analysieren
varnishstat -f MAIN.fetch_failed,MAIN.backend_busy
# Varnish: HTTP-Requests und Cache-Verhalten analysieren
varnishlog
# Nur Cache-Hits anzeigen
varnishlog -g request -q "RespHeader:x-cache ~ hit"
# Nur Cache-Misses anzeigen
varnishlog -g request -q "RespHeader:x-cache ~ miss"
# Fehlerhafte Backend-Requests filtern
varnishlog -g request -q "BerespStatus >= 500"
# Requests einer bestimmten URL analysieren
varnishlog -g request -q 'ReqURL ~ "/kategorie/"'
redis-cli info zur Analyse von Speicherverbrauch, Evictions und Redis-Hits
bash
# Redis: Allgemeine Server- und Cache-Informationen
redis-cli INFO
# Nur Speicherinformationen anzeigen
redis-cli INFO memory
# Cache-Hit-Rate prüfen
redis-cli INFO stats
# Speicherbelegung live überwachen
watch -n1 'redis-cli INFO memory | grep used_memory_human'
# Aktuelle Eviction-Policy prüfen
redis-cli CONFIG GET maxmemory-policy
# Anzahl gelöschter Keys durch Speicherknappheit prüfen
redis-cli INFO stats | grep evicted_keys
# Alle aktiven Keys zählen
redis-cli DBSIZE
# Langsame Redis-Operationen anzeigen
redis-cli SLOWLOG GET 10
Für Shopware besonders relevant sind dabei:
- cache_hit vs. cache_miss bei Varnish
- evicted_keys in Redis
- hohe backend_fail-Werte
- ungewöhnlich hoher RAM-Verbrauch
- steigende TTFB trotz aktivem Cache
Diese Werte helfen dabei, fehlerhafte Cache-Invalidierungen, Speicherprobleme oder falsch konfigurierte Reverse-Proxys frühzeitig zu erkennen.
Browser-Developer-Tools zur Kontrolle von HTTP-Headern wie x-cache, cache-control oder age
Lasttests mit ApacheBench (ab), wrk oder Apache JMeter zur Simulation hoher Besucherzahlen
Gerade bei größeren Shopware-Installationen helfen diese Metriken dabei, Engpässe frühzeitig zu erkennen und die Cache-Konfiguration gezielt zu optimieren.
Welche Caches sind für meinen Shop relevant?
Für maximale Performance und stabile Ladezeiten kombiniert ein professionelles Shopware-Setup mehrere aufeinander abgestimmte Cache-Ebenen. Welche davon sinnvoll sind, hängt von Shopgröße, Traffic und Infrastruktur ab. Besonders bei größeren Shopware-Installationen mit vielen Produkten oder hohem Besucheraufkommen empfiehlt sich die Kombination aus HTTP-Cache, Redis, PHP OPcache und optional Varnish.
Die wichtigsten Cache-Ebenen im Überblick
HTTP-Cache (Full-Page-Cache)
Der integrierte Shopware HTTP-Cache speichert bereits fertig gerenderte Seiten wie Kategorien, Produktseiten oder Erlebniswelten zwischen. Dadurch müssen diese Inhalte nicht bei jedem Seitenaufruf erneut aus Datenbank und Templates erzeugt werden.
Vorteile:
- Deutlich reduzierte Serverlast
- Schnellere Ladezeiten und bessere TTFB
- Weniger Datenbankzugriffe
Redis (Objekt- & Session-Cache)
Redis ersetzt das langsame dateibasierte Caching und speichert Daten direkt im Arbeitsspeicher (RAM). Besonders Sessions, Warenkörbe und Cache-Objekte profitieren davon.
Typische Einsatzbereiche:
- Sessions & Warenkörbe
- Symfony-/Shopware-Cache
- Locking & Message Queues
Beispiel Redis-Konfiguration für Cache-Instanzen:
conf
maxmemory 2gb
maxmemory-policy volatile-lru
appendonly no
save ""
PHP OPcache
Der OPcache speichert bereits kompilierten PHP-Code im RAM. Dadurch muss PHP Dateien nicht bei jedem Request erneut interpretieren.
Empfohlene Einstellungen für Shopware 6:
ini
opcache.memory_consumption=512
opcache.max_accelerated_files=60000
opcache.interned_strings_buffer=32
opcache.validate_timestamps=0
Gerade bei Shopware 6 mit vielen Plugins reduziert ein sauber konfigurierter OPcache die CPU-Last erheblich.
Varnish Cache (optional)
Varnish fungiert als vorgeschalteter Reverse-Proxy vor dem Webserver und beantwortet HTTP-Anfragen direkt aus dem Arbeitsspeicher — noch bevor PHP oder Shopware überhaupt ausgeführt werden.
Das ist besonders relevant für:
- hohe Besucherzahlen
- Lastspitzen (Black Friday, TV-Kampagnen)
- große Produktkataloge
Wichtige Varnish-Metriken prüfen:
bash
varnishstat -1 | grep cache_hit
varnishlog -g request -q "ReqUrl ~ /"
Welche Kombination ist sinnvoll?
| Shopgröße | Empfehlung |
|---|---|
| Kleine Shops | HTTP-Cache + OPcache |
| Mittelgroße Shops | HTTP-Cache + Redis + OPcache |
| Große Shops / Enterprise | Redis + OPcache + Varnish + dedizierte Cache-Cluster |
Für Enterprise-Umgebungen mit mehreren Webservern empfiehlt sich zusätzlich:
- getrennte Redis-Instanzen
- zentralisierte Cache-Invalidierung
- Varnish XKey Soft-Purges
- horizontale Skalierung über Loadbalancer
Eine falsch konfigurierte Cache-Landschaft kann dagegen zu inkonsistenten Preisen, hohen TTFB-Werten oder unnötiger Serverlast führen.
Wie skaliere ich das Caching bei hohem Traffic?
Bei sehr hohen Besucherzahlen — etwa während Black Friday, TV-Kampagnen oder großen Rabattaktionen — muss die Last konsequent von CPU und Festplatten auf Arbeitsspeicher (RAM) sowie dedizierte Cache-Systeme verlagert werden.
Professionelle Shopware-Architekturen kombinieren dafür mehrere voneinander getrennte Cache-Ebenen.
1. Varnish als vorgelagerter HTTP-Reverse-Proxy
Der integrierte Shopware-HTTP-Cache läuft weiterhin über PHP-Prozesse. Unter hoher Last kann dies schnell zum Flaschenhals werden, da selbst Cache-Hits den Webserver belasten.
Die Lösung besteht darin, einen vorgeschalteten Varnish-Cache einzusetzen. Varnish liefert zwischengespeicherte Seiten direkt aus dem Arbeitsspeicher aus — noch bevor Shopware oder PHP überhaupt verarbeitet werden.
Dadurch lassen sich je nach Shopstruktur häufig über 80–90 % aller Requests vollständig vom Backend fernhalten. Besonders Kategorie-, Produkt- und CMS-Seiten profitieren massiv von dieser Entlastung.
2. Redis für Sessions und Applikations-Cache auslagern
Ohne Redis speichert Shopware große Mengen kleiner Cache-Dateien direkt auf dem Dateisystem. Unter hoher Last entstehen dadurch schnell I/O-Engpässe auf SSD- oder NVMe-Storage.
Empfohlen wird deshalb die Trennung in mehrere Redis-Instanzen:
Redis-Instanz für den Shopware-Applikations-Cache
Separate Redis-Instanz für Sessions und Warenkörbe
Dadurch werden kritische Session-Daten von flüchtigen Cache-Daten getrennt und sämtliche Lese- und Schreibzugriffe erfolgen direkt im RAM statt auf der Festplatte.
conf
maxmemory 4gb
maxmemory-policy volatile-lru
appendonly no
save ""
3. Horizontale Skalierung über mehrere Webserver
Bei Enterprise-Setups werden zusätzlich mehrere Shopware-Webserver hinter einem Loadbalancer betrieben. Varnish und Redis fungieren dabei als zentrale Cache-Schicht vor den eigentlichen Application-Servern.
Diese Architektur ermöglicht:
- stabile Ladezeiten trotz Lastspitzen
- deutlich geringere Datenbanklast
- bessere Skalierbarkeit bei Kampagnen
- höhere Ausfallsicherheit
Gerade bei großen Shopware-Projekten entscheidet die richtige Cache-Architektur maßgeblich über Stabilität, Conversion-Rate und Serverkosten.
