KakapoWP KakapoWP
Inloggen Gratis proberen
Helpcentrum/Performance/Objectcache met Redis of Memcached instellen

Objectcache met Redis of Memcached instellen

Geldt voor: Kakapo Performance· 5 min leestijd

Eerst: wat kan jouw PHP?

De objectcache praat met Redis of Memcached, en daarvoor heeft PHP de bijbehorende extensie nodig. Kakapo controleert dat tijdens de uitvoering door na te gaan of de klasse Redis respectievelijk Memcached werkelijk geladen is. Een draaiende Redis-dienst alleen is niet genoeg: zonder extensie kan PHP niet met hem praten. Ontbreekt die, dan is het item in de keuzelijst uitgeschakeld en staat ernaast welk pakket ontbreekt (bijvoorbeeld ‘pecl install redis’ of het distributiepakket php<version>-redis, daarna PHP opnieuw starten). Vindt Kakapo alleen de oudere extensie ‘memcache’ zonder d, dan zegt het dat uitdrukkelijk — gebruikt wordt die niet, omdat daarin de verzamelopvraging getMulti en de binaire overdracht ontbreken. Is geen van beide extensies aanwezig, dan kom je hier niet verder; dat is een zaak van je hoster, niet van de plugin.

Verbinding invoeren

Host is gewoonlijk 127.0.0.1. Een schema als ‘http://’ wordt geweigerd, want hier hoort alleen een hostnaam of IP. Voor een Unix-socket vul je het pad daarvan in (bijv. /var/run/redis/redis.sock) en zet je de poort op 0. De poort is bij Redis gewoonlijk 6379, bij Memcached 11211; toegestaan is 0 tot 65535. Wissel je van koppeling, dan neemt Kakapo de standaardpoort automatisch mee, zolang de oude nog de standaard was. Het databasenummer (0 tot 255) bestaat alleen bij Redis en scheidt deze site van andere toepassingen op dezelfde server. Gebruiker en wachtwoord heb je alleen nodig als jouw Redis met ACL werkt (vanaf Redis 6) of Memcached SASL verlangt. Het sleutelprefix scheidt twee WordPress-installaties op dezelfde geheugenserver van elkaar — blijft het veld leeg, dan wordt er een prefix van je siteadres afgeleid (kwpp plus acht tekens). Toegestaan zijn letters, cijfers en _ . : -, hoogstens 40 tekens. De geldigheid per item staat standaard op 86400 seconden; toegestaan is 0 tot 2592000. 0 betekent ‘verloopt nooit’ — dat heeft gevolgen voor het legen, zie hieronder.

Verbinding testen voordat je iets schrijft

De knop ‘Verbinding testen’ bouwt werkelijk een verbinding op, schrijft een testsleutel (geldigheid 30 seconden), leest hem terug, vergelijkt hem teken voor teken met de geschreven waarde en verwijdert hem weer. Pas wanneer de waarde ongewijzigd terugkomt, geldt de test als geslaagd — een simpel ‘connect() heeft geen false teruggegeven’ zou te mager zijn: Redis kan verbonden en toch alleen-lezen zijn (replica), Memcached accepteert verbindingen voordat het geheugen heeft. Voor de hele cyclus geldt een tijdslimiet van één seconde. De gemeten duur en een paar servergegevens (versie, gebruikt geheugen, aantal items, looptijd) staan daarna in de kaart. Mislukt de test, dan staat daar de concrete reden: niet bereikbaar, aanmelding geweigerd, database niet selecteerbaar. De test loopt uitsluitend in het beheer of via cron — bij het opbouwen van een pagina voor een bezoeker wordt nooit een testverbinding opgebouwd.

Drop-in schrijven — en wat daarbij gebeurt

De objectcache leeft in het bestand wp-content/object-cache.php. WordPress laadt dat heel vroeg, nog vóór elke plugin. Vóór het schrijven toont Kakapo een voorbeeld: welk bestand wordt aangemaakt, welke toegangsgegevens daarin staan, wat er daarna in de geheugenserver ligt en hoe de weg terug eruitziet. Ligt er iets in de weg — een ontbrekende extensie, een vreemde drop-in op deze plek, wp-content niet schrijfbaar, een ontbrekend sjabloon —, dan is de knop uitgeschakeld en staat de reden erboven; die controle wordt bij het schrijven aan de serverkant herhaald. Ter bevestiging typ je INSTALLIEREN in. Er wordt dan eerst naar een buurbestand geschreven, dat door PHP zelf op syntaxis wordt gecontroleerd (mits exec() is toegestaan en een PHP-binary bereikbaar is), en pas daarna naar zijn plek hernoemd en op 0644 gezet. Reden voor die omweg: een half geschreven object-cache.php zou een fout vóór elke plugin zijn — de site zou wit blijven, ook de beheerpagina waarmee je het wilde terugdraaien. Elke schrijfactie krijgt bovendien een eigen generatie, zodat items van vóór een verwijdering niet ineens weer gelden (anders kwam bijvoorbeeld de oude blognaam terug en vlogen ingelogde beheerders uit hun sessie). Ligt er op die plek al een vreemde drop-in, dan wordt die noch overschreven, noch verwijderd.

In bedrijf: cijfers lezen, legen, verwijderen

Onder ‘Lopend bedrijf’ staan de cijfers van deze ene paginaweergave: opbouw van de verbinding in milliseconden, treffers en missers, hoeveel daarvan uit de geheugenserver kwamen, hoeveel aanvragen daarheen gingen en hoe lang die duurden. Statistieken over de tijd zijn er bewust niet — die bijhouden zou bij elke weergave meer kosten dan ze meet. ‘Objectcache legen’ wisselt de sleutel-salt in plaats van FLUSHDB of flush_all te sturen: daarmee wijst geen enkele oude sleutel nog naar een geldig item, maar blijven gegevens van andere toepassingen op dezelfde server onaangeroerd. De verweesde items verlopen via de ingestelde geldigheid — staat die op 0, dan verlopen ze nooit en stapelen ze zich op tot Redis of Memcached zelf opruimt. Wijzig je instellingen, dan geldt nog steeds wat er in het bestand staat; Kakapo meldt het verschil en biedt ‘Drop-in bijwerken’ aan. ‘Drop-in verwijderen’ wist precies één bestand, zonder een databaseregel of tijdschema achter te laten; bij het deactiveren van de plugin verdwijnt het eveneens. Wil je het wachtwoord niet in leesbare vorm in het bestand hebben, dan definieer je het als KWPP_OC_AUTH in de wp-config.php en laat je het veld leeg — de constante heeft voorrang. Hetzelfde kan voor host, poort, gebruiker, database en prefix (KWPP_OC_HOST, KWPP_OC_PORT, KWPP_OC_USER, KWPP_OC_DB, KWPP_OC_PREFIX); een serverwissel vraagt dan niet om het opnieuw schrijven van de drop-in.

Vond je dit artikel nuttig?