Caching in PHP: Redis, Memcached und integrierte Lösungen – Beschleunigung von Webanwendungen
Jeder PHP-Entwickler steht vor Performance-Problemen: Die Datenbank antwortet langsam, Seiten laden lange und der Server kämpft unter der Last. Die Lösung dieser Probleme liegt in einem durchdachten Caching. In diesem Artikel betrachten wir drei grundlegende Ansätze zum Caching in PHP: integrierte Mechanismen (APCu, OpCache), externe Server Memcached und Redis. Sie erfahren, wann welches Werkzeug die richtige Wahl ist und erhalten fertige Codebeispiele für die Implementierung.
1. Integrierte Lösungen: OpCache und APCu
Beginnen wir mit dem Einfachsten – dem Caching auf Ebene der PHP-Engine. Hier sind zwei Schlüsselkomponenten hervorzuheben.
1.1. OpCache (PHP opcode cache)
OpCache ist seit PHP Version 5.5 in PHP integriert. Es cached den kompilierten Bytecode (opcode) von PHP-Skripten. Ohne OpCache würde jede Anfrage den Quellcode erneut parsen und kompilieren – eine unnötige Ressourcenverschwendung. Die Aktivierung von OpCache bringt eine Geschwindigkeitssteigerung von bis zu 30-50%, ohne eine einzige Zeile Code ändern zu müssen.
Konfiguration in php.ini:
opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=4000opcache.revalidate_freq=601.2. APCu (Alternative PHP Cache user)
APCu ist ein Cache für Benutzerdaten (Variablen, Berechnungsergebnisse). Es arbeitet im Arbeitsspeicher und ist ideal geeignet für die Speicherung kleiner, häufig abgefragter Daten: Konfigurationen, Übersetzungen, Ergebnisse einfacher SQL-Abfragen.
Beispiel für die Arbeit mit APCu:
<?php// Daten für 300 Sekunden im Cache speichernapcu_store('site_config', $config, 300);
// Daten aus dem Cache abrufen$cached = apcu_fetch('site_config');if ($cached === false) { // Daten nicht vorhanden – laden und speichern $cached = loadConfigFromDB(); apcu_store('site_config', $cached, 300);}
// Schlüssel löschenapcu_delete('site_config');?>Vorteile: Keine externen Dienste erforderlich, einfach zu konfigurieren, minimale Latenz. Nachteile: Funktioniert nur auf einem einzelnen Server, Daten gehen bei Neustart von PHP-FPM verloren.
2. Memcached – Verteilter Cache für einfache Daten
Memcached ist ein hochleistungsfähiges, verteiltes Caching-System im Arbeitsspeicher. Es ist ideal für die Speicherung einfacher Schlüssel-Wert-Paare und Sessions. Im Gegensatz zu APCu läuft Memcached als separater Server und kann von mehreren Webservern gemeinsam genutzt werden.
Installation der Erweiterung: pecl install memcached
Beispiel für Verbindung und Arbeit:
<?php$memcached = new Memcached();$memcached->addServer('localhost', 11211);
// Setzen mit TTL (time to live) von 600 Sekunden$memcached->set('user_123_profile', $profileData, 600);
// Abrufen$profile = $memcached->get('user_123_profile');if ($memcached->getResultCode() === Memcached::RES_NOTFOUND) { // Cache-Fehltreffer – aus der Datenbank laden $profile = getUserProfileFromDB(123); $memcached->set('user_123_profile', $profile, 600);}
// Session-Caching (Konfiguration in php.ini)// session.save_handler = memcached// session.save_path = "localhost:11211"?>Wann Memcached verwenden:
- Caching von Ergebnissen von SQL-Abfragen (Produktlisten, Kategorien)
- Speicherung von Benutzersessions in einer verteilten Umgebung
- Caching von HTML-Blöcken (z. B. Menü oder Footer)
Einschränkungen: Keine integrierten Datenstrukturen (nur Strings), maximale Wertgröße 1 MB (erweiterbar), keine Persistenz – bei Serverneustart wird der Cache gelöscht.
3. Redis – Fortschrittlicher Cache mit Datenstrukturen
Redis ist nicht nur ein Cache, sondern ein vollwertiger In-Memory-Datenspeicher mit Unterstützung für komplexe Typen: Listen, Sets, Hashes, Sortierte Sets. Es unterstützt Persistenz (Speicherung auf der Festplatte),