Caching in PHP: Redis, Memcached und integrierte Lösungen zur Website-Beschleunigung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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=60

Es 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 memcached

Beispiel 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

Blogs

Buchempfehlungen