Configurer le cache d'objets avec Redis ou Memcached
Zuerst: Was kann dein PHP?
Der Objekt-Cache spricht Redis oder Memcached an, und dafür braucht PHP die passende Erweiterung. Kakapo prüft das zur Laufzeit, indem es nachsieht, ob die Klasse Redis bzw. Memcached wirklich geladen ist. Ein laufender Redis-Dienst allein genügt nicht: ohne Erweiterung kann PHP nicht mit ihm sprechen. Fehlt sie, ist der Eintrag in der Auswahlliste deaktiviert, und daneben steht, welches Paket fehlt (etwa „pecl install redis" oder das Distributionspaket php<version>-redis, danach PHP neu starten). Findet Kakapo nur die ältere Erweiterung „memcache" ohne d, sagt es das ausdrücklich — benutzt wird sie nicht, weil ihr die Sammelabfrage getMulti und die binäre Übertragung fehlen. Ist keine der beiden Erweiterungen da, kommst du hier nicht weiter; das ist eine Sache deines Hosters, nicht des Plugins.
Verbindung eintragen
Host ist üblicherweise 127.0.0.1. Ein Schema wie „http://" wird abgelehnt, denn hier gehört nur Hostname oder IP hin. Für einen Unix-Socket trägst du dessen Pfad ein (z. B. /var/run/redis/redis.sock) und setzt den Port auf 0. Der Port ist bei Redis üblicherweise 6379, bei Memcached 11211; erlaubt ist 0 bis 65535. Wechselst du die Anbindung, zieht Kakapo den Standard-Port automatisch mit, solange der alte noch der Standard war. Die Datenbank-Nummer (0 bis 255) gibt es nur bei Redis und trennt diese Site von anderen Anwendungen auf demselben Server. Benutzer und Passwort brauchst du nur, wenn dein Redis mit ACL arbeitet (ab Redis 6) oder Memcached SASL verlangt. Das Schlüssel-Präfix trennt zwei WordPress-Installationen auf demselben Speicherserver voneinander — bleibt das Feld leer, wird ein Präfix aus deiner Site-Adresse abgeleitet (kwpp plus acht Zeichen). Erlaubt sind Buchstaben, Ziffern und _ . : -, höchstens 40 Zeichen. Die Gültigkeit je Eintrag steht voreingestellt auf 86400 Sekunden; erlaubt ist 0 bis 2592000. 0 heißt „läuft nie ab" — das hat Folgen fürs Leeren, siehe unten.
Verbindung testen, bevor du etwas schreibst
Der Knopf „Verbindung testen" baut wirklich eine Verbindung auf, schreibt einen Testschlüssel (Gültigkeit 30 Sekunden), liest ihn zurück, vergleicht ihn Zeichen für Zeichen mit dem geschriebenen Wert und löscht ihn wieder. Erst wenn der Wert unverändert zurückkommt, gilt der Test als bestanden — ein bloßes „connect() hat nicht false geliefert" wäre zu dünn: Redis kann verbunden und trotzdem schreibgeschützt sein (Replikat), Memcached nimmt Verbindungen an, bevor es Speicher hat. Für den gesamten Zyklus gilt ein Zeitlimit von einer Sekunde. Die gemessene Dauer und ein paar Serverangaben (Version, belegter Speicher, Anzahl Einträge, Laufzeit) stehen danach in der Karte. Schlägt der Test fehl, steht dort der konkrete Grund: nicht erreichbar, Anmeldung abgelehnt, Datenbank nicht wählbar. Der Test läuft ausschließlich im Adminbereich oder per Cron — im Seitenaufbau eines Besuchers wird nie eine Testverbindung aufgebaut.
Drop-in schreiben — und was dabei passiert
Der Objekt-Cache lebt in der Datei wp-content/object-cache.php. WordPress lädt sie sehr früh, noch vor jedem Plugin. Vor dem Schreiben zeigt Kakapo eine Vorschau: welche Datei angelegt wird, welche Zugangsdaten darin stehen, was danach im Speicherserver liegt und wie der Rückweg aussieht. Liegt etwas im Weg — fehlende Erweiterung, fremdes Drop-in an dieser Stelle, wp-content nicht beschreibbar, fehlende Vorlage —, ist der Knopf deaktiviert und der Grund steht darüber; die Prüfung wiederholt sich beim Schreiben serverseitig. Zum Bestätigen tippst du INSTALLIEREN ein. Geschrieben wird dann zuerst in eine Nachbardatei, die von PHP selbst auf Syntax geprüft wird (sofern exec() erlaubt und eine PHP-Binärdatei erreichbar ist), und erst danach an ihren Platz umbenannt und auf 0644 gesetzt. Grund für den Umweg: ein halb geschriebenes object-cache.php wäre ein Fehler vor jedem Plugin — die Site wäre weiß, auch die Verwaltungsseite, über die du es zurücknehmen wolltest. Jedes Schreiben bekommt außerdem eine eigene Generation, damit Einträge aus der Zeit vor einer Entfernung nicht schlagartig wieder gelten (sonst käme etwa der alte Blogname zurück und angemeldete Administratoren flögen aus ihrer Sitzung). Liegt an der Stelle bereits ein fremdes Drop-in, wird es weder überschrieben noch gelöscht.
Im Betrieb: Zahlen lesen, leeren, entfernen
Unter „Laufender Betrieb" stehen die Zahlen dieses einen Seitenaufrufs: Verbindungsaufbau in Millisekunden, Treffer und Fehltreffer, wie viele davon aus dem Speicherserver kamen, wie viele Anfragen dorthin gingen und wie lange sie dauerten. Eine Statistik über die Zeit gibt es bewusst nicht — sie zu führen würde bei jedem Aufruf mehr kosten, als sie misst. „Objekt-Cache leeren" wechselt das Schlüssel-Salz, statt FLUSHDB oder flush_all zu schicken: damit zeigt kein alter Schlüssel mehr auf einen gültigen Eintrag, Daten anderer Anwendungen auf demselben Server bleiben aber unberührt. Die verwaisten Einträge verfallen über die eingestellte Gültigkeit — steht die auf 0, verfallen sie nie und sammeln sich an, bis Redis oder Memcached selbst aufräumt. Änderst du Einstellungen, gilt weiter, was in der Datei steht; Kakapo meldet die Abweichung und bietet „Drop-in aktualisieren" an. „Drop-in entfernen" löscht genau eine Datei, ohne Datenbank-Zeile oder Zeitplan zu hinterlassen; beim Deaktivieren des Plugins verschwindet sie ebenfalls. Willst du das Passwort nicht im Klartext in der Datei haben, definierst du es als KWPP_OC_AUTH in der wp-config.php und lässt das Feld leer — die Konstante hat Vorrang. Dasselbe geht für Host, Port, Benutzer, Datenbank und Präfix (KWPP_OC_HOST, KWPP_OC_PORT, KWPP_OC_USER, KWPP_OC_DB, KWPP_OC_PREFIX); ein Serverwechsel braucht dann kein Neuschreiben des Drop-ins.