Technologie · Datenbank

Redis — Cache, Sessions und Warteschlangen im Betrieb

Redis hält Daten im Arbeitsspeicher und liefert sie schneller aus, als eine Datenbank es könnte. Wir setzen ihn in Shopware 6 und TYPO3 als Cache und Session-Speicher ein, außerdem als Warteschlange für Hintergrundarbeit mit Symfony Messenger. Redis beschleunigt allerdings nichts, was vorher falsch gebaut war. Er verbirgt es nur, bis der Cache leer ist.

Cache und Session-Speicher im Betrieb

Was ist Redis?

Redis ist ein Datenspeicher, der Informationen im Arbeitsspeicher hält — genutzt für Zwischenspeicher, Sitzungsdaten und Aufgabenlisten, die schnell und kurzlebig sein dürfen.

Wofür wir Redis einsetzen

In Shopware 6 nimmt Redis den Objekt- und HTTP-Cache sowie die Sessions auf. Das entlastet die Datenbank spürbar, weil Warenkorb und Anmeldestatus nicht mehr über Tabellen laufen, die bei jedem Seitenaufruf geschrieben werden. In TYPO3 übernimmt Redis die Caching-Framework-Backends. Bei eigenen Symfony-Anwendungen nutzen wir ihn zusätzlich als Transport für Symfony Messenger, damit Importe, Mailversand und ERP-Abgleiche nicht im Web-Request hängen.

Typisch sind Projekte mit mehreren Anwendungsservern hinter einem Loadbalancer. Sobald Sitzungen nicht mehr auf einer einzelnen Maschine liegen dürfen, braucht es einen gemeinsamen Speicher — dafür ist Redis der naheliegende Weg. Ebenso bei Shops mit vielen gleichzeitigen Zugriffen auf dieselben Kategorieseiten. Was sich dagegen nicht lösen lässt: Ein Cache hilft nur beim zweiten Aufruf. Der erste bleibt so langsam, wie die Anwendung ihn baut.

Wie wir Redis betreiben

Redis läuft bei uns in eigenen Containern auf dem Proxmox-Cluster, getrennt nach Verwendungszweck. Cache und Sessions teilen sich nicht dieselbe Instanz, weil sie unterschiedliche Regeln brauchen: Ein Cache darf Einträge verwerfen, eine Sitzung nicht. Genau daran scheitern viele Installationen. Steht maxmemory-policy auf allkeys-lru und liegen die Sessions in derselben Datenbank, werden Warenkörbe unter Last einfach entfernt — und niemand findet den Grund im Shop-Log.

Dazu gehören Persistenzeinstellungen, ein festes Speicherlimit und Monitoring auf Speicherauslastung, verworfene Schlüssel und Trefferquote. Redis ist außerdem nicht öffentlich erreichbar, sondern nur im internen Netz und mit Passwort. Bei Deployments prüfen wir, ob Cache-Schlüssel versioniert sind, damit ein Release nicht auf alte Strukturen trifft. Und wir leeren im Zweifel gezielt, statt pauschal alles zu verwerfen und den Shop kalt starten zu lassen.

Wann Sie Redis nicht brauchen

Ein einzelner Webserver mit überschaubarem Traffic kommt ohne Redis aus. Sessions im Dateisystem und der Datenbank-Cache reichen dann, und Sie sparen sich einen weiteren Dienst, der überwacht, aktualisiert und im Störungsfall verstanden werden muss. Redis wird oft verkauft, wo eine fehlende Index-Definition das eigentliche Problem war. Nach dem Index war die Abfrage schnell genug — der Cache hätte sie nur verdeckt.

Unsere Reihenfolge ist deshalb: erst messen, dann die Abfrage oder den Code reparieren, dann cachen. Wer zuerst cacht, verschiebt das Problem auf den Tag, an dem der Cache leer ist — nach einem Deployment, nach einem Neustart, nach einer Preisänderung im gesamten Sortiment. Dann trifft die volle Last eine Anwendung, die nie dafür gebaut wurde. Wir sagen Ihnen das lieber vorher.

Häufige Fragen

Macht Redis unseren Shop schneller?

Redis macht wiederholte Zugriffe schneller, keine schlecht gebauten Abfragen. Ein Cache liefert beim zweiten Aufruf aus dem Arbeitsspeicher, was beim ersten teuer berechnet wurde — die teure Berechnung selbst bleibt bestehen. Deshalb sehen wir uns zuerst die Datenbankabfragen und den Anwendungscode an. Wenn danach noch Last übrig ist, bringt Redis echten Gewinn. Vorher kauft man sich nur eine bequeme Verzögerung des Problems.

Gehen Warenkörbe verloren, wenn Sessions in Redis liegen?

Das passiert, wenn Speicherlimit und Verdrängungsregel falsch gesetzt sind. Steht maxmemory-policy auf allkeys-lru und teilen sich Cache und Sessions eine Instanz, entfernt Redis unter Speicherdruck auch Sitzungsdaten — Warenkörbe und Anmeldungen inklusive. Wir trennen deshalb Cache und Sessions, wählen für Sessions die Regel noeviction, damit Redis bei Speicherdruck lieber einen Fehler meldet als Sitzungen zu verwerfen, aktivieren Persistenz und überwachen die Speicherauslastung. Dann ist Redis für Sitzungen unproblematisch.

Ab wann lohnt sich Redis überhaupt?

Sinnvoll wird Redis, sobald mehrere Anwendungsserver eine gemeinsame Sitzung brauchen oder dieselben Inhalte sehr häufig abgerufen werden. Ebenso, wenn Hintergrundarbeit aus dem Request heraus muss — Importe, Mailversand, Schnittstellen zum ERP. Bei einem einzelnen Server mit ruhigem Betrieb ist der zusätzliche Dienst meist nicht nötig. Sharpness richtet Redis dann ein, wenn er ein konkretes Problem löst, und nicht als Standardposition im Angebot.

Redis oder Valkey — was setzen Sie ein?

Beides, je nach Umgebung. Redis hat 2024 die Lizenz gewechselt und ist seit Version 8 unter AGPLv3 wieder quelloffen; parallel ist mit Valkey ein BSD-lizenzierter Fork unter dem Dach der Linux Foundation entstanden. Protokoll und Konfiguration sind weitgehend identisch. Wo Distribution oder Anwendung es vorgeben — aktuelle Debian- und RHEL-Stände sowie Adobe Commerce ab Version 2.4.8 setzen auf Valkey —, betreiben wir Valkey. Für Bestandssysteme mit Redis besteht kein Handlungsdruck, wohl aber ein Wechselpfad.

Redis im Bestand oder im Neubau?

Wir übernehmen auch Systeme, die woanders gebaut wurden — nach einem Blick in Code und Hosting.

Womit wir sonst arbeiten

Anrufen Projekt anfragen