
💡 Wie man die Serverlast reduziert und WordPress mit Memcached beschleunigt
Ein WordPress-System ohne Caching gleicht einem Motor, der an jeder Ampel von Grund auf neu gestartet wird. Ein Besucher ruft eine Seite auf, PHP baut sie komplett neu zusammen und greift dabei 30- bis 60-mal auf die Datenbank zu. Zehn gleichzeitige Besucher bedeuten dreihundert Abfragen. Fünfzig Besucher lösen eine Lawine aus, die den Server Verbindungen schneller abbrechen lässt, als Sie einen Befehl in der Konsole zu Ende tippen können.
Das Problem liegt nicht bei WordPress selbst. Der dynamische Seitenaufbau ist standardmäßig inhärent verschwenderisch; nahezu jedes CMS funktioniert so. Die Lösung hat sich über Jahre im Betrieb von Hochlastprojekten bewährt: Objekt-Caching im Arbeitsspeicher mittels Memcached. Eine korrekt konfigurierte Memcached-Schicht verwandelt einen Server, der bei fünfzig gleichzeitigen Nutzern in die Knie geht, in eine Maschine, die Hunderte ohne eine Millisekunde Zögern bei der Antwortzeit bedient.
Wir gehen den vollständigen Einrichtungsprozess durch: von der Installation des Daemons bis zu einem Lasttest, der den Unterschied in Zahlen zeigt. Alle Befehle wurden unter Ubuntu 22.04/24.04 und AlmaLinux 9 getestet und sind mit PHP 8.2-8.5 kompatibel.
💡 Kurzüberblick:
- Installieren Sie den Memcached-Daemon und binden Sie ihn aus Sicherheitsgründen an localhost
- Kompilieren Sie die PHP-Memcached-Erweiterung via PECL für Ihre PHP-Version
- Platzieren Sie das object-cache.php-Drop-in von Automattic im wp-content-Verzeichnis
- Installieren Sie Batcache und konfigurieren Sie advanced-cache.php für Seiten-Caching
- Prüfen Sie die Response-Header über die Browser-DevTools
- Führen Sie einen Lasttest mit k6 durch und vergleichen Sie die Ergebnisse vorher und nachher
Was Memcached ist und warum Ihr WordPress es braucht
Memcached ist ein Daemon, der Daten und Objekte im Arbeitsspeicher des Servers ablegt. Anders als dateibasiertes Caching (WP Super Cache, W3 Total Cache, WP Rocket), das fertiges HTML auf die Festplatte schreibt, arbeitet Memcached eine Ebene tiefer: Ergebnisse von Datenbankabfragen, zusammengestellte Menüs, Widgets und Seiteneinstellungen werden im RAM abgelegt und können in Mikrosekunden ohne erneuten Zusammenbau abgerufen werden.
In der Praxis sieht das Bild so aus. Eine typische WordPress-Seite ohne Caching stellt 30 bis 60 Abfragen an MySQL. Bei 50 gleichzeitigen Besuchern erhält die Datenbank eineinhalb- bis dreitausend Abfragen, und die CPU geht in den Überlastmodus. Memcached fängt die überwiegende Mehrheit dieser Abfragen auf RAM-Ebene ab: Die Datenbank ruht, die CPU bleibt frei, und der Server antwortet sofort.
Technisch arbeitet Memcached mit Schlüssel-Wert-Paaren. Der Schlüssel ist ein Hash der SQL-Abfrage, der Wert das serialisierte Ergebnis. Wenn WordPress dieselbe Seite erneut zusammenstellt, fragt es zuerst Memcached: „Haben Sie diesen Schlüssel?" und erhält fast immer eine fertige Antwort ohne einen einzigen Festplattenzugriff.
Die Technologie entstand 2003 innerhalb von LiveJournal als Lösung für extreme Datenbanklastprobleme. Heute laufen WordPress.com, Wikipedia, Twitter und Tausende von Hochlastprojekten mit Memcached. Es ist ausgereift, stabil und berechenbar: genau das, was die Produktion braucht.
Installation des Memcached-Daemons
Wir behandeln zwei Hauptszenarien: Ubuntu (22.04/24.04) mit apt und AlmaLinux / Rocky Linux 9 mit dnf. Passen Sie die Befehle an Ihre Distribution an.
Unter Ubuntu:
1 sudo apt update && sudo apt install memcached libmemcached-tools -y
Unter AlmaLinux / Rocky Linux 9:
1 sudo dnf install memcached libmemcached -y
Nach der Installation startet der Daemon automatisch. Prüfen Sie dies:
1 systemctl status memcached
Standardmäßig lauscht Memcached auf Port 11211 an allen Netzwerkschnittstellen. Das ist ein Sicherheitsleck: Ihr Cache ist für jeden erreichbar, der diesen Port von außen ansprechen kann. Binden Sie den Daemon daher zuerst an localhost.
Öffnen Sie die Konfigurationsdatei (/etc/memcached.conf unter Ubuntu, /etc/sysconfig/memcached unter AlmaLinux) und stellen Sie sicher, dass die Zeile -l 127.0.0.1 vorhanden und nicht auskommentiert ist. Starten Sie den Daemon neu:
1 sudo systemctl restart memcached
Erstellen der PHP-Erweiterung via PECL
Der Daemon allein beschleunigt WordPress nicht; Sie benötigen einen PHP-Client, der PHP beibringt, mit Memcached zu kommunizieren. Installieren Sie die Erweiterung memcached (beachten Sie: speziell memcached mit dem Buchstaben d, nicht memcache). Letztere wurde ab PHP-Version 8.0 aus PHP entfernt und sollte nicht verwendet werden.
Installieren Sie unter Ubuntu zunächst die Build-Werkzeuge. Ersetzen Sie Ihre PHP-Version: php8.4-dev, php8.3-dev oder php8.2-dev:
1 sudo apt install php8.4-dev php-pear libmemcached-dev pkg-config make gcc -y
Anschließend erstellen Sie die Erweiterung:
1 sudo pecl install memcached
Unter AlmaLinux / Rocky Linux 9 ist der Befehlssatz ähnlich:
1 sudo dnf install php-devel php-pear libmemcached-devel make gcc -y 2 sudo pecl install memcached
Nach dem Erstellen muss die Erweiterung in PHP registriert werden. Legen Sie eine INI-Datei an:
1 echo "extension=memcached.so" | sudo tee /etc/php/8.4/mods-available/memcached.ini 2 sudo phpenmod memcached
Unter AlmaLinux lautet der Pfad abweichend: /etc/php.d/memcached.ini.
Wenn Sie in Plesk Obsidian arbeiten, lautet der Befehl zum Neuladen der PHP-Handler nach der Installation der Erweiterung:
1 plesk bin php_handler --reread
Prüfen Sie, ob die Erweiterung geladen wurde:
1 php -m | grep memcached
Die Ausgabe sollte memcached enthalten. Ist sie leer, überprüfen Sie den Pfad zur INI-Datei und starten Sie PHP-FPM neu: sudo systemctl restart php8.4-fpm.
WordPress mit Memcached verbinden
Der Daemon ist installiert, die PHP-Erweiterung ist geladen. Nun müssen Sie WordPress auf Anwendungsebene mit Memcached verbinden.
Der De-facto-Standard ist heute der offizielle Drop-in von Automattic: wp-memcached auf GitHub. Er stammt von denselben Entwicklern, die auch Batcache und WordPress.com betreuen, und funktioniert einwandfrei mit PHP 8.x (einschließlich 8.4 und 8.5).
Kopieren Sie die Datei object-cache.php aus dem Repository in den Ordner /wp-content/ Ihrer Website. WordPress erkennt sie automatisch und verwendet Memcached fortan als Object-Cache-Backend, ohne dass zusätzliche Plugins nötig sind.
Weicht der Memcached-Port vom Standard (11211) ab, ergänzen Sie Folgendes in der wp-config.php:
1 $memcached_servers = array( 2 array( '127.0.0.1', 11211 ) 3 );
Page-Caching: Batcache
Object-Caching ist die halbe Miete. Die andere Hälfte besteht darin, fertige HTML-Seiten zwischenzuspeichern, sodass PHP für anonyme Besucher überhaupt nicht ausgeführt wird. Hier kommt Batcache ins Spiel, ein Plugin von Automattic, das generierte Seiten im selben Memcached ablegt.
Das Prinzip ist einfach: Ein Besucher ruft die Website auf; Batcache prüft, ob eine fertige HTML-Kopie dieser Seite in Memcached vorliegt. Ist eine vorhanden und noch nicht abgelaufen, wird sie sofort ausgeliefert, unter Umgehung der gesamten PHP- und MySQL-Kette. Ist keine vorhanden oder ist der Besucher eingeloggt, wird die Seite neu generiert und gleichzeitig für nachfolgende Aufrufe im Cache gespeichert.
Installation:
Laden Sie das Archiv von wordpress.org herunter, entpacken Sie es und laden Sie die Datei advanced-cache.php in das Wurzelverzeichnis von /wp-content/ hoch. Öffnen Sie anschließend die wp-config.php und fügen Sie die Zeile hinzu, die das Caching aktiviert:
1 define( 'WP_CACHE', true );
Senden Sie die Datei batcache.php nach /wp-content/plugins/ und aktivieren Sie das Plugin im Admin-Bereich.
Innerhalb der advanced-cache.php finden sich unter den Kommentaren etwa ein Dutzend Einstellungen. Die nützlichsten: max_age (Lebensdauer einer Seite in Sekunden, Standard 300 bzw. 5 Minuten), seconds (Intervall zwischen Neugenerierungen derselben URL) und unique (verschiedene User-Agents nicht getrennt cachen). Für die meisten Websites funktionieren die Standardwerte; passen Sie sie nur an, wenn Sie verstehen, warum.
Eine wichtige Nuance: Stellen Sie sicher, dass define( 'WP_CACHE', true ) VOR der Zeile require_once ABSPATH . 'wp-settings.php' in der wp-config.php erscheint. Steht sie dahinter, wird das Caching nicht aktiviert und WordPress ignoriert es stillschweigend.
Video: Installation und Konfiguration von Anfang bis Ende
Theorie ist die Grundlage, aber Konsolenbefehle sieht man am besten einmal in Aktion. Dieses Video zeigt den vollständigen Zyklus der Einrichtung von Objekt-Caching für WordPress mit Redis und Memcached, von der Installation des Daemons bis zur Überprüfung des Ergebnisses:
Prüfen, ob Memcached funktioniert
Der beste Test ist ein praktischer. Fügen Sie in advanced-cache.php einen benutzerdefinierten Header hinzu, damit Sie visuell erkennen können, ob die Seite aus dem Cache ausgeliefert oder neu generiert wurde.
Suchen Sie diese Zeile in advanced-cache.php:
1 var $headers = array();
Ersetzen Sie sie durch:
1 var $headers = array( 'memcached' => 'activated' );
Öffnen Sie nun die DevTools in Ihrem Browser (F12), wechseln Sie zum Tab „Netzwerk" und laden Sie die Seite mehrmals neu. In den Response Headers sehen Sie das Feld memcached: activated, was bedeutet, dass Batcache funktioniert hat und die Seite direkt aus dem RAM an den Client ging.
Eine zusätzliche Methode führt über die Server-Kommandozeile. Rufen Sie die Daemon-Statistiken ab:
1 echo "stats" | nc 127.0.0.1 11211
Achten Sie in der Ausgabe auf get_hits und get_misses. Wenn get_hits ansteigt, während Sie die Seiten der Website im Browser aktualisieren, liefert Memcached zuverlässig zwischengespeicherte Objekte aus.
Lasttests: Zahlen, nicht Eindrücke
Seinen wahren Wert zeigt Memcached unter Druck. Der ursprüngliche Test auf einem Server mit 1 Kern und 512 MB Arbeitsspeicher ergab einen beeindruckenden Kontrast: Ohne Memcached stürzte der Server nach 15 Sekunden bei 50 gleichzeitigen Nutzern ab; mit Memcached hielt er über 400 Nutzer 50 Sekunden lang ohne einen einzigen Fehler durch. Das ist keine Magie, sondern Physik: Wenn die CPU keine Zyklen damit verbringt, dieselben Seiten neu zusammenzusetzen, bedient sie neue Besucher.
Zum Selbsttest werden heute moderne Werkzeuge genutzt. Eines der komfortabelsten ist k6 von Grafana (Open Source, läuft mit einem einzigen Befehl). Ein grundlegender Test:
1 k6 run --vus 100 --duration 30s http://your-site.com/
100 virtuelle Nutzer für 30 Sekunden. Vergleichen Sie die Ergebnisse mit deaktiviertem Batcache (WP_CACHE auskommentieren) und aktiviertem; der Unterschied bei erfolgreichen Antworten und der mittleren Latenz wird in Größenordnungen messbar sein.
Für eine schnelle Prüfung ohne Softwareinstallation eignet sich das Web-Tool Loader.io; die kostenlose Stufe erlaubt bis zu 10.000 Clients pro Test, was für die meisten Websites mehr als ausreichend ist.
Redis oder Memcached: Was soll man wählen
Die Frage, die unweigerlich aufkommt, lautet: Warum nicht Redis? Beides sind In-Memory-Key-Value-Stores; beide arbeiten mit WordPress über Drop-ins. Die kurze Antwort: Für reines Caching ist Memcached einfacher und schneller; für alles andere Redis.
Vergleichen wir die wesentlichen Punkte:
Kriterium | Memcached | Redis |
|---|---|---|
Datenmodell | Nur Strings | Strings, Listen, Sets, Hashes, Geodaten, Pub/Sub |
Multi-Threading | Nutzt alle Kerne direkt | Überwiegend single-threaded |
Persistenz | Keine (rein im Speicher) | RDB/AOF (speichert auf Platte) |
WordPress-Ökosystem | Automattic/wp-memcached + Batcache | Redis Object Cache (über 400.000 Installationen) |
Einrichtungskomplexität | Minimal | Etwas höher |
Cache-Leerung bei Neustart | Vollständig (aber in Minuten wieder warm) | Kann erhalten bleiben |
Für das Caching von WordPress-Objekten ist ein String-Key-Value mehr als ausreichend. Die zusätzlichen Redis-Datentypen werden hier nicht benötigt. Bei Get/Set-Operationen sind beide eher durch den Netzdurchsatz als durch die CPU limitiert; unter sonst gleichen Bedingungen sind sie gleichauf. Memcached punktet beim Multi-Threading: Es nutzt alle CPU-Kerne direkt, während Redis eine überwiegend single-threaded Architektur beibehält.
Wählen Sie Redis, wenn Sie auch Sessions, Aufgabenwarteschlangen speichern oder Persistenz benötigen. Für die Aufgabe „WordPress beschleunigen und die Datenbank entlasten" liefert Memcached schneller Ergebnisse und mit weniger beweglichen Teilen.
⁉️🤔 Häufig gestellte Fragen
Benötige ich Memcached auf Shared Hosting?
Auf den meisten Shared-Hosting-Paketen ist Memcached nicht verfügbar: Die Anbieter gewähren keinen Zugriff auf den Daemon auf Serverebene. Wenn Ihr Paket jedoch einen VPS oder dedizierten Server umfasst, dauert die Installation 10 bis 15 Minuten und bringt einen der spürbarsten Geschwindigkeitsgewinne unter allen WordPress-Optimierungen. Prüfen Sie die Möglichkeiten Ihres Pakets im Control Panel oder fragen Sie den Hosting-Support.
Batcache oder WP Rocket: Was ist besser?
WP Rocket ist ein Multitool, das Seiten-Caching (dateibasiert), CSS/JS-Optimierung und Lazy Loading übernimmt. Batcache ist ein schmales Werkzeug speziell für Memcached-Seiten-Caching. Sie konkurrieren nicht, sie ergänzen sich: Batcache arbeitet auf Serverebene und liefert Seiten aus, ohne PHP zu starten, während WP Rocket auf Anwendungsebene arbeitet. In der Praxis werden oft beide genutzt: Batcache für anonyme Besucher, WP Rocket für die Feinoptimierung.
Wie leere ich den Memcached-Cache?
Die einfachste Methode ist ein Neustart des Daemons:
sudo systemctl restart memcached. Der Cache wird vollständig geleert und beginnt bei nachfolgenden Besuchen, sich wieder aufzuwärmen. Für gezieltes Leeren nutzen Sie das Plugin Query Monitor: Es zeigt den Inhalt des Object Cache an und erlaubt das Leeren einzelner Schlüssel. Es gibt auch eine Konsolenoption:echo "flush_all" | nc 127.0.0.1 11211.
Warum wurde die Website nach der Installation von object-cache.php nicht schneller?
Der häufigste Grund ist, dass die PHP-Erweiterung nicht geladen wurde. Prüfen Sie
php -m | grep memcached. Ist die Ausgabe leer, überprüfen Sie den Pfad zur INI-Datei und starten Sie PHP-FPM neu. Der zweithäufige Grund:object-cache.phpwurde nicht nach/wp-content/kopiert oder mit Berechtigungsfehlern kopiert (die Datei muss für den Benutzer, unter dem PHP läuft, lesbar sein). Drittens: Der Memcached-Daemon läuft nicht; prüfen Siesystemctl status memcached.
Kollidiert Memcached mit OPcache?
Nein, das sind unterschiedliche Ebenen. OPcache speichert kompilierten PHP-Bytecode und beschleunigt den Interpreter-Start. Memcached speichert Anwendungsdaten: Ergebnisse von Datenbankabfragen. Sie arbeiten in verschiedenen Phasen der Anfrageverarbeitung und ergänzen sich gut. Im Produktivbetrieb wird der Einsatz beider empfohlen.
Kann Memcached über mehrere Server hinweg genutzt werden?
Ja, das ist eines der Hauptszenarien. In der Konfiguration
$memcached_serverskönnen Sie mehrere IP-Adressen von Memcached-Daemons angeben, und der Client verteilt die Schlüssel automatisch auf diese. Für WordPress übernimmt dasobject-cache.php-Drop-in dies: Es unterstützt einen Server-Pool direkt.
Sollten Sie Memcached auf Ihrem Server installieren
Die Installation von Memcached ist kein Allheilmittel, aber einer der effektivsten Schritte bei der WordPress-Optimierung. Wenn Ihre Website auf einem VPS oder dedizierten Server läuft und Sie möchten, dass sie ein Vielfaches an Traffic ohne Hardwaretausch bewältigt, installieren Sie es. Zehn bis fünfzehn Minuten Konsolenarbeit, und die Datenbank ist kein Flaschenhals mehr.
Wenn die Website auf Shared Hosting ohne Zugriff auf den Daemon liegt, ziehen Sie Redis (wird häufiger bereitgestellt) oder dateibasiertes Caching via WP Rocket in Betracht. Wenn Sie bereits auf einem VPS sind, öffnen Sie das Terminal und folgen Sie den Schritten aus der Kurzübersicht oben. Das Ergebnis sehen Sie in Ihrem ersten Lasttest.



