Einleitung: Warum ist Caching in PHP notwendig?
Jede moderne Webanwendung in PHP steht vor dem Problem der Performance. Jede Datenbankabfrage, das Lesen von Konfigurationsdateien oder das Rendern komplexer HTML-Vorlagen kostet Zeit und Serverressourcen. Caching ist eine Technik, die es ermöglicht, die Ergebnisse teurer Operationen in einem schnellen Speicher abzulegen, um bei wiederholten Anfragen die fertigen Daten sofort ausliefern zu können.
In PHP gibt es mehrere Caching-Ebenen: vom integrierten Bytecode-Caching (OPcache) bis hin zu verteilten Systemen wie Redis und Memcached. In diesem Artikel schauen wir uns an, wie und wann Sie jedes dieser Tools einsetzen, damit Ihre Website schneller läuft, mehr Last aushält und Ressourcen spart.
Integrierte Lösungen: OPcache und APCu
Bevor Sie externe Dienste anschließen, sollten Sie einen Blick auf das werfen, was PHP „out of the box“ bietet. Zwei Schlüsselmechanismen – OPcache und APCu – können ohne Installation zusätzlicher Software eine deutliche Leistungssteigerung bringen.
OPcache: Bytecode-Caching
Jedes Mal, wenn PHP ein Skript ausführt, kompiliert es dieses in Bytecode (opcode). OPcache speichert diesen Bytecode im gemeinsamen Speicher, sodass die Kompilierungsphase bei nachfolgenden Anfragen übersprungen werden kann. Dies ist besonders effektiv für Frameworks (Laravel, Symfony) und CMS (WordPress, Drupal), bei denen für jede Anfrage Dutzende von Dateien geladen werden.
Konfiguration in php.ini:
opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=4000opcache.revalidate_freq=60Es wird empfohlen, OPcache auf allen Production-Servern zu aktivieren. Dies ist wohl der einfachste Weg, eine PHP-Anwendung um 20–40 % zu beschleunigen.
APCu: Caching von Benutzerdaten
APCu (Alternative PHP Cache) bietet eine einfache Schnittstelle zum Speichern beliebiger Daten im gemeinsamen Speicher. Im Gegensatz zu OPcache, das Code cached, speichert APCu Ergebnisse von Berechnungen: Daten aus der DB, serialisierte Objekte, HTML-Fragmente.
Beispiel für das Caching eines SQL-Abfrageergebnisses:
// Daten für 300 Sekunden speichern$key = 'users_list';$data = apcu_fetch($key, $success);
if (!$success) { $data = $db->query("SELECT * FROM users")->fetchAll(); apcu_store($key, $data, 300);}
return $data;APCu ist ideal für Single-Page-Anwendungen oder Projekte mit einem einzigen Server. Seine Daten werden jedoch lokal gespeichert, und bei Verwendung mehrerer Server (horizontale Skalierung) benötigen Sie eine verteilte Lösung.
Memcached: Einfaches und schnelles verteiltes Caching
Memcached ist ein Hochleistungs-Caching-System, das im Arbeitsspeicher arbeitet. Es wurde entwickelt, um dynamische Webanwendungen zu beschleunigen, indem die Last auf Datenbanken reduziert wird. Die Hauptvorteile sind Einfachheit, Geschwindigkeit und Unterstützung für verteilte Speicherung.
Installation der PHP-Erweiterung:
pecl install memcachedBeispiel für Verbindung und Nutzung:
$memcached = new Memcached();$memcached->addServer('localhost', 11211);
$key = 'article_123';$cached = $memcached->get($key);
if ($cached === false) { $article = getArticleFromDB(123); $memcached->set($key, $article, 3600); // Cache für 1 Stunde} else { $article = $cached;}Memcached unterstützt keine komplexen Datenstrukturen (nur Strings und binäre Objekte), aber es bewältigt die Aufgabe eines „klassischen“ Caches hervorragend: Daten per Schlüssel ablegen, per Schlüssel abrufen. Wichtig zu beachten ist, dass Memcached keine integrierte Persistenz hat – bei einem Server-Neustart gehen alle Daten verloren.
Redis: Leistungsstarkes und flexibles Tool für Caching
Redis ist nicht nur ein Cache, sondern ein vollwertiges In-Memory-Datenspeichersystem mit Unterstützung für Persistenz, Transaktionen und komplexe Strukturen (Listen, Sets, Hashes, Queues). Für den PHP-Entwickler ist Red