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/predisBeispiel 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.
Auch in der Bibliothek
Überwachung von C++-Anwendungen: Bibliothek metrics zur Erfassung von Metriken
gRPC für C++: Bibliotheken, Beispiele und Anleitung zur Verwendung
Überwachung von Go-Anwendungen (Golang): Bibliotheken und Tools
Caching in Go (Golang): Redis, In-Memory und andere Lösungen
protobuf C++: Komplette Anleitung mit Code-Beispielen