Caching in PHP: Redis, Memcached, APCu und Datei-Caching

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

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/predis


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


Beispiel 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

Empfehlungen