Caching in PHP: Redis und andere Werkzeuge
Caching ist einer der wichtigsten Mechanismen zur Optimierung der Leistung von Webanwendungen in PHP. Ein richtig konfiguriertes Caching kann die Serverantwortzeit um das 10- bis 50-fache verkürzen, die Datenbanklast reduzieren und den Ressourcenverbrauch senken. In diesem Artikel behandeln wir vier grundlegende Ansätze zum Caching in PHP: Redis, Memcached, APCu und das klassische Datei-Caching.
Warum ist Caching in PHP notwendig?
Ohne Caching kann jede PHP-Anfrage Dutzende von SQL-Abfragen ausführen, Vorlagen verarbeiten und externe Daten laden. Caching speichert das Ergebnis einer aufwändigen Operation (z. B. eines Datenbankabrufs oder XML-Parsings) und liefert es direkt aus, ohne erneute Berechnungen. Hauptanwendungsszenarien:
- Caching von SQL-Abfrageergebnissen — Speichern des Ergebnisses einer SELECT-Abfrage für 5–60 Sekunden.
- Caching von HTML-Fragmenten — fertige Menüblöcke, Widgets, Breadcrumbs.
- Caching von Sitzungen — Speichern von Sitzungsdaten in Redis anstelle von Dateien.
- Caching von API-Daten — Antworten externer Dienste (Wetter, Wechselkurse).
- Caching von Opcode — Beschleunigung der Ausführung des PHP-Codes selbst (OPcache).
1. Redis — König des In-Memory-Cachings
Redis ist ein leistungsstarker In-Memory-Datenspeicher vom Typ „Schlüssel-Wert“ mit Unterstützung für komplexe Strukturen (Listen, Hashes, Mengen). Für PHP gibt es mehrere Clients: predis/predis (reines PHP) und ext-redis (C-Erweiterung).
Beispiel für die Installation über Composer:
composer require predis/predisBasisbeispiel für Caching mit Redis:
<?phprequire 'vendor/autoload.php';
use Predis\\Client;
$redis = new Client([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379,]);
$cacheKey = 'user_list_page_1';$ttl = 300; // 5 Minuten
// Versuchen, Daten aus dem Cache zu holenif ($redis->exists($cacheKey)) { $data = unserialize($redis->get($cacheKey)); echo "Daten aus dem Cache";} else { // Aufwändige Operation (z. B. SQL-Abfrage) $data = getUsersFromDatabase(1, 20); $redis->setex($cacheKey, $ttl, serialize($data)); echo "Daten aus der DB";}
print_r($data);Vorteile von Redis: Geschwindigkeit (Millisekunden), Unterstützung von TTL, atomare Operationen, Pub/Sub, Persistenz auf der Festplatte. Nachteile: Erfordert einen separaten Server, verbraucht Arbeitsspeicher.
2. Memcached — Einfachheit und Geschwindigkeit
Memcached ist ein weiterer beliebter In-Memory-Datenspeicher, jedoch ohne komplexe Datenstrukturen. In PHP wird die Erweiterung memcached verwendet (achten Sie auf den Buchstaben d — dies ist die neuere Version).
Installation der Erweiterung:
sudo apt install php-memcachedBeispiel für die Arbeit mit Memcached:
<?php$memcached = new Memcached();$memcached->addServer('127.0.0.1', 11211);
$key = 'article_42';$data = $memcached->get($key);
if ($memcached->getResultCode() === Memcached::RES_NOTFOUND) { $data = fetchArticleFromDB(42); $memcached->set($key, $data, 3600); // 1 Stunde echo "Datenbankabfrage";} else { echo "Aus dem Memcached-Cache";}Wann Memcached wählen: Wenn Sie einfaches Caching von Zeichenfolgen ohne komplexe Strukturen benötigen und keine Persistenz konfigurieren möchten. Memcached ist bei einfachen get/set-Operationen schneller als Redis, bietet aber weniger Funktionalität.
3. APCu — Caching direkt in PHP
APCu (Alternative PHP Cache) ist eine Erweiterung zum Caching von Daten im gemeinsamen Speicher des aktuellen PHP-Prozesses. Erfordert keinen separaten
Auch in der Bibliothek
Aufgabenwarteschlangen für PHP: RabbitMQ, Beanstalkd und Gearman
Apache POI Java: vollständiges Tutorial mit Codebeispielen
ASP.NET Core für C# (.NET): Vollständiger Leitfaden mit Beispielen
Caching in C++: Die Bibliothek Cache++