Caching in PHP: Redis, Memcached und integrierte Lösungen (Fortgeschrittenenniveau)

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, Memcached und integrierte Lösungen: Fortgeschrittenenniveau



In der modernen Webentwicklung beeinflusst die Anwendungsleistung direkt die Benutzererfahrung, die Conversion-Rate und das Ranking in Suchmaschinen. Caching ist eine der effektivsten Methoden, um PHP-Anwendungen zu beschleunigen, die Datenbanklast zu reduzieren und die Antwortzeit zu verkürzen. Auf fortgeschrittenem Niveau muss ein Entwickler nicht nur Redis oder Memcached anschließen, sondern auch Strategien zur Invalidierung, Datenserialisierung, Konfigurationsoptimierung und die Auswahl des richtigen Werkzeugs für die jeweilige Aufgabe verstehen. In diesem Artikel behandeln wir drei Schlüsselansätze: Redis, Memcached und integrierte PHP-Lösungen (OPcache, APCu), sowie praktische Beispiele und Anti-Patterns.



1. Integrierte Lösungen: OPcache und APCu



Bevor externe Dienste angebunden werden, sollte man das, was PHP bereits bietet, bestmöglich nutzen. Integrierte Mechanismen arbeiten auf der Ebene des Interpreters und erfordern keine Installation zusätzlicher Software.



1.1. OPcache

OPcache (früher Zend Optimizer+) kompiliert und speichert PHP-Skripte als Bytecode im gemeinsamen Speicher. Dies eliminiert die Notwendigkeit des Parsens und Kompilierens des Codes bei jeder Anfrage. Für die meisten Produktionsprojekte ist OPcache standardmäßig aktiviert, seine Konfiguration ist jedoch entscheidend.



Empfohlene php.ini-Einstellungen:

opcache.enable=1opcache.memory_consumption=128opcache.interned_strings_buffer=16opcache.max_accelerated_files=10000opcache.revalidate_freq=2opcache.fast_shutdown=1


Wichtig: Im Entwicklungsmodus setzen Sie opcache.revalidate_freq=0 und opcache.validate_timestamps=1, damit Änderungen an Dateien sofort übernommen werden.



1.2. APCu (APC User Cache)

APCu bietet einen Benutzer-Cache im gemeinsamen Speicher. Es ist ideal für die Speicherung kleiner, häufig angefragter Daten: Berechnungsergebnisse, Konfigurationen, HTML-Fragmente.



Beispiel zur Verwendung von APCu:

// Daten für 300 Sekunden im Cache speichernapcu_store('user_profile_' . $userId, $profileData, 300);

// Daten abrufenif (apcu_exists('user_profile_' . $userId)) { $profile = apcu_fetch('user_profile_' . $userId);} else { // Daten generieren $profile = getUserProfileFromDB($userId); apcu_store('user_profile_' . $userId, $profile, 300);}


Einschränkungen: APCu funktioniert nur innerhalb eines einzelnen Servers. In einer Cluster-Architektur wird es nicht zwischen den Knoten synchronisiert, was es für verteilte Systeme ungeeignet macht.



2. Memcached: Einfachheit und Geschwindigkeit



Memcached ist ein verteiltes Caching-System im Arbeitsspeicher. Sein Hauptvorteil ist die hohe Geschwindigkeit und Einfachheit. Memcached unterstützt keine Persistenz (Daten werden nur im RAM gespeichert) und hat keine integrierten Replikationsmechanismen, was es ideal für temporäre Caches macht.



2.1. Verbindung und grundlegende Verwendung

// Verbindung herstellen$memcached = new Memcached();$memcached->addServer('localhost', 11211);

// Daten mit TTL von 600 Sekunden speichern$memcached->set('user_123', ['name' => 'Ivan', 'email' => 'ivan@example.com'], 600);

// Daten abrufen$user = $memcached->get('user_123');if ($memcached->getResultCode() === Memcached::RES_NOTFOUND) { // Daten nicht gefunden — aus DB laden $user = fetchUserFromDB(123); $memcached->set('user_123', $user, 600);}


2.2. Fortgeschrittene Techniken mit Memcached

  • CAS (Check And Set): Ermöglicht atomare Aktualisierungen von Daten und vermeidet Wettlaufsituationen.
  • Multi-get: Das gruppierte Abrufen von Schlüsseln reduziert die Anzahl der Netzwerkaufrufe.
  • Inkremente: Für Zähler (z. B. Anzahl der Aufrufe) verwenden Sie $memcached->increment().




                
                

Blogs

Buchempfehlungen