Caching in PHP: Redis, Memcached und APCu – vollständiger Leitfaden

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 andere Tools



Caching ist eine der effektivsten Methoden, um Webanwendungen in PHP zu beschleunigen. Anstatt jedes Mal schwere Datenbankabfragen durchzuführen oder komplexe Daten zu berechnen, speichern Sie das Ergebnis in einem schnellen Speicher. In diesem Artikel behandeln wir die wichtigsten Caching-Tools in PHP: Redis, Memcached, APCu und einfaches Datei-Caching. Sie erfahren, wann Sie welches Tool wählen und wie Sie es richtig einsetzen.



Warum ist Caching notwendig?

Stellen Sie sich vor, Ihre Website zeigt eine Liste der neuesten Nachrichten. Ohne Caching zwingt jeder Benutzer PHP dazu, eine SQL-Abfrage auszuführen, Daten zu verarbeiten und HTML zu generieren. Wenn die Website von 1000 Personen pro Minute besucht wird, wird die Datenbank enorm belastet. Der Cache ermöglicht es, das Ergebnis für 5–10 Minuten zu speichern und sofort auszuliefern.



Hauptanwendungsfälle für Caching in PHP:

  • Ergebnisse schwerer SQL-Abfragen
  • HTML-Fragmente von Seiten
  • Daten von API-Anfragen an externe Dienste
  • Benutzersitzungen
  • Konfigurationen und Einstellungen


1. Redis – der König des Cachings

Redis ist ein In-Memory-Datenspeicher, der nach dem Schlüssel-Wert-Prinzip arbeitet. Es unterstützt komplexe Datenstrukturen: Listen, Mengen, Hash-Tabellen. Für PHP gibt es die beliebte Erweiterung phpredis und die modernere Bibliothek Predis.



Installation und Verbindung

Installieren Sie Redis auf dem Server und dann die Erweiterung über Composer:

composer require predis/predis


Beispiel für die Arbeit mit Redis in PHP

<?phprequire 'vendor/autoload.php';

use Predis\\Client;

$client = new Client([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379,]);

// Daten für 10 Minuten speichern$client->setex('news_list', 600, json_encode($newsData));

// Daten abrufen$cached = $client->get('news_list');if ($cached) { $newsData = json_decode($cached, true);} else { // Datenbankabfrage und Speicherung im Cache}?>


Vorteile von Redis: hohe Geschwindigkeit (Mikrosekunden), automatisches Löschen abgelaufener Schlüssel (TTL), Unterstützung von Pub/Sub, Transaktionen. Nachteil – es verbraucht Arbeitsspeicher.



2. Memcached – Einfachheit und Geschwindigkeit

Memcached ist ein weiterer In-Memory-Speicher, aber einfacher als Redis. Es speichert nur Zeichenketten und unterstützt keine komplexen Datenstrukturen. Für grundlegendes Caching ist es jedoch ideal.



Beispiel mit Memcached

<?php$memcached = new Memcached();$memcached->addServer('127.0.0.1', 11211);

$key = 'user_profile_123';$data = $memcached->get($key);

if ($data === false) { // Daten nicht im Cache – aus der Datenbank abrufen $data = getUserProfileFromDB(123); $memcached->set($key, $data, 300); // 5 Minuten}?>


Memcached ist bei einfachen get/set-Operationen schneller als Redis, bietet aber weniger Funktionalität. Es eignet sich zum Cachen von Abfrageergebnissen und Sitzungen.



3. APCu – Cache auf PHP-Ebene

APCu (Alternative PHP Cache) ist eine Erweiterung, die Daten direkt im Speicher des PHP-Prozesses speichert. Es benötigt keinen separaten Server, funktioniert aber nur innerhalb eines einzelnen Servers.



Beispiel mit APCu

<?php// Wert für 10 Minuten speichernapcu_store('site_config', $config, 600);

// Wert abrufen$config = apcu_fetch('site_config');if ($config === false) { // Konfiguration aus Datei laden $config = parse_ini_file('config.ini'); apcu_store('site_config', $config, 600);}?>


APCu ist ideal zum Cachen von Konfigurationen, Vorlagen und kleinen Daten, die sich selten ändern. Nachteil – Daten gehen beim Neustart von PHP oder des Webservers verloren.



4.

Empfehlungen