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

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



Caching ist eines der wichtigsten Werkzeuge zur Leistungssteigerung von Webanwendungen. In PHP stehen dem Entwickler mehrere Ansätze zur Verfügung: vom einfachen Datei-Cache bis hin zu leistungsstarken In-Memory-Systemen wie Redis und Memcached. In diesem Artikel werden wir jede Option im Detail besprechen, Codebeispiele geben und Ihnen helfen, die optimale Lösung für Ihr Projekt auszuwählen.



Warum ist Caching notwendig?

Ohne Caching kann jede Anfrage an die Website zu wiederholten Berechnungen, Datenbankabfragen oder externen API-Aufrufen führen. Der Cache ermöglicht es, das Ergebnis einer teuren Operation zu speichern und aus einem schnellen Speicher auszuliefern. Die wichtigsten Anwendungsszenarien sind:

  • Speichern von Ergebnissen von SQL-Abfragen (insbesondere Aggregationen und JOINs).
  • Caching von HTML-Fragmenten (z. B. Menüs, Sidebars).
  • Speichern von Benutzersitzungen.
  • Caching von Antworten externer APIs.


1. Redis — der König des In-Memory-Cachings

Redis ist ein Hochleistungs-In-Memory-Datenspeicher, der Datenstrukturen wie Strings, Listen, Hashes und Sets unterstützt. Für PHP gibt es mehrere Clients, die beliebtesten sind predis/predis (reines PHP) und phpredis (C-Erweiterung).



Installation

composer require predis/predis


Beispiel: Caching des Ergebnisses einer Datenbankabfrage

<?phprequire 'vendor/autoload.php';

use Predis\\Client;

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

function getUsersFromDb() { // Simulation einer langsamen Abfrage sleep(2); return ['user1', 'user2', 'user3'];}

$cacheKey = 'users:all';$cached = $redis->get($cacheKey);

if ($cached) { $users = json_decode($cached, true); echo "Aus dem Cache: ";} else { $users = getUsersFromDb(); $redis->setex($cacheKey, 3600, json_encode($users)); // TTL 1 Stunde echo "Aus der Datenbank: ";}

print_r($users);


Wichtige Funktionen von Redis:

  • setex() — Setzen eines Schlüssels mit einer Lebensdauer (TTL).
  • expire() — Setzen einer TTL für einen vorhandenen Schlüssel.
  • del() — Löschen eines Schlüssels.
  • incr() — Atomare Erhöhung (Zähler).


2. Memcached — Einfachheit und Geschwindigkeit

Memcached ist ein weiteres beliebtes In-Memory-System, das jedoch im Gegensatz zu Redis nur String-Werte unterstützt und keine integrierten Datenstrukturen hat. Für einfaches Caching ist es aufgrund seines Minimalismus jedoch schneller.



Installation der Erweiterung

sudo apt install php-memcached# oder über pecl:pecl install memcached


Beispiel: Caching eines HTML-Fragments

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

function renderMenu() { // Aufwändige Menügenerierung return '<nav><ul><li>Startseite</li></ul></nav>';}

$menuHtml = $memcached->get('menu:main');if ($menuHtml === false) { $menuHtml = renderMenu(); $memcached->set('menu:main', $menuHtml, 600); // TTL 10 Minuten}

echo $menuHtml;


Wichtig: Memcached unterstützt standardmäßig keine TTL in Sekunden — die Zeit wird in Sekunden (ganze Zahl) angegeben. Wenn Sie 0 übergeben, wird der Cache unbegrenzt gespeichert.



3. APCu — integriertes Caching in PHP

APCu (Alternative PHP Cache) ist eine Erweiterung zum Caching von Daten im gemeinsamen Speicher eines einzelnen Servers. Ideal für einseitige Anwendungen und kleine Projekte.



Installation

sudo apt install php-apcu


Beispiel: Caching einer Konfiguration

<?php$configKey = 'app:config';

if

Empfehlungen