← Zurück zu den Artikeln
Performance & Datenbanken

Caching ist mehr als nur Redis und Datenbankabfragen. Eine vollständige Performance-Landkarte.

Eine vollständige Landkarte der Caching-Ebenen in modernen Anwendungen: Browser-Cache, vollständiges Seiten-Caching, Opcode-Caching, Fragment-Caching, Redis, MySQL-Query-Cache und Aggregattabellen.

Verfügbare Sprachen
Caching ist mehr als nur Redis und Datenbankabfragen. Eine vollständige Performance-Landkarte.
Ausgewählter Artikel ↗

Caching ist mehr als nur Redis und Datenbankabfragen. Eine vollständige Performance-Landkarte.

Heute bin ich auf eine tiefgehende Analyse der Caching-Typen gestoßen, und das hat mich inspiriert, mein eigenes Wissen zu strukturieren. Wir denken oft, Caching sei Redis oder ein Datenbankabfrage-Cache. In Wirklichkeit ist es ein ganzes Ökosystem, das auf jeder Ebene einer Anwendung arbeitet!

Also, was ist ein Cache? Einfach gesagt, ein Cache ist ein Zwischenpuffer mit schnellem Zugriff, in dem Daten gespeichert werden. Seine Kernaufgabe ist es, die Arbeit mit großen Datenmengen in kürzester Zeit mit begrenzten Ressourcen zu ermöglichen — sei es Serverleistung oder Bandbreite des Nutzers.

Lassen Sie uns aufschlüsseln, wo diese „Beschleuniger" leben.

🖥️ 1. Client-seitiges Caching (Browser-Cache)

Hier sparen wir Traffic und Latenz zwischen Nutzer und Server. Der Browser wird angewiesen, eine lokale Kopie zu verwenden, und der Server antwortet mit dem Status 304 Not Modified.

  • Caching von Dateien & Bildern: Perfekt für medienreiche Websites. Header wie Expires und Cache-Control weisen den Browser an, Ressourcen wochenlang zu speichern. Der Haken: Wenn sich eine Datei ändert, sieht der Nutzer die Aktualisierung möglicherweise nicht sofort.
  • HTTPS-Caching: Sicherheits-Header (z. B. Strict-Transport-Security) zwingen den Browser, für Ihre Domain immer HTTPS zu verwenden.
  • Certificate Authority (CA) Caching: Speichert den „Vertrauensstempel" für Ihr SSL-Zertifikat, damit der Browser es nicht bei jedem Besuch bei der CA validieren muss.
  • Seiten-Caching: Der intelligenteste Typ. Mithilfe von Headern wie ETag und Last-Modified prüft der Server, ob sich eine Seite seit dem letzten Besuch des Nutzers geändert hat. Wenn nicht, sendet er ein 304, und der Browser lädt die lokale Kopie.

Fazit: Browser-Caching spart Traffic und beschleunigt Wiederholungsbesuche, aber um es zu aktivieren, muss ein Nutzer die Website zuerst besuchen. Es hilft also, reduziert aber nicht drastisch die anfängliche Serverlast.

🚀 2. Server-seitiges Caching

Hier werden Daten auf dem Server gespeichert und funktionieren nach dem „Eins-zu-Viele"-Prinzip. Dies ist unsere Hauptartillerie im Kampf um Leistung.

  • 2.1. Vollständiges Seiten-Caching: Die effektivste Methode. Eine vollständig gerenderte HTML-Seite wird sofort aus dem Speicher ausgeliefert, sodass selbst ein bescheidener Server Millionen von Anfragen bewältigen kann. Ideal für Gastnutzer, bei denen Inhalte nicht personalisiert sind. Der Nachteil: nicht geeignet für nutzerspezifische Seiten. Wird oft mit einer TTL verwendet (z. B. ab 2 Minuten).
  • 2.2. PHP-Opcode-Caching: (OPcache, APC). Dies speichert den kompilierten Bytecode des Skripts, sodass er nicht bei jeder Anfrage neu kompiliert werden muss. Reduziert die CPU-Last entscheidend.
  • 2.3. Partielles (Fragment-)Caching: Das komplexeste, aber leistungsstärkste Werkzeug. Es ermöglicht, dynamische Teile einer Seite (z. B. eine Seitenleiste, Produktliste) mit Abhängigkeiten von Datenbanktabellen, Nutzersitzungen oder GET-Parametern zu cachen. Der Hauptvorteil: drastische Reduzierung der Datenbankabfragen für authentifizierte Nutzer. Einen Pool von Anwendungsservern zu skalieren ist einfacher als einen Datenbankcluster.
  • 2.4 / 2.5. In-Memory-Daten-Caching (Redis, Memcached): Hier leben serialisierte Daten: Ergebnisse schwerer Berechnungen, Konfigurationsdateien, Systemzustand. Dies ist unser primäres Werkzeug für das Caching von Anwendungsdaten, nicht nur von gerendertem HTML.
  • 2.6. MySQL-Query-Cache: Ein Klassiker, aber mit Einschränkungen. Abfragen, die Funktionen wie UNIX_TIMESTAMP() verwenden, invalidieren den Cache ständig. Die Lösung besteht darin, Bedingungen zu verwenden, die sich seltener ändern, damit benachbarte Abfragen gecacht werden können.
  • 2.7. Caching über Aggregate/Materialized Views: Die goldene Regel: „Lesevorgänge sollten Schreibvorgänge deutlich übertreffen." Wenn sich Daten selten ändern, aber oft gelesen werden, berechnen Sie sie vorab und speichern Sie sie in einer Übersichtstabelle.

🗺️ Zusammenfassung: Es geht um Strategie

Effektives Caching ist keine einzelne Silberkugel, sondern eine mehrschichtige Verteidigung. Eine gut aufgebaute Strategie gleicht einem Satz russischer Puppen: CDN -> Webserver (Vollständiges Seiten-Caching) -> Backend (Fragment-Caching) -> In-Memory-Cache (Redis) -> Datenbank-Cache -> Aggregattabellen.

Zu verstehen, welches Werkzeug auf welcher Ebene einzusetzen ist, ist die wahre Kunst, schnelle und reaktionsfähige Systeme zu bauen.

Technologien & Themen

Artikel-Tags

Keine Artikel entsprechen diesen Filtern.

Haben Sie ein Projekt oder eine Idee zu besprechen?

Lassen Sie uns sprechen ↗