Memcached Cache Gebruiken en Beheren in ServBay
Memcached is een krachtig, gedistribueerd in-memory object cachesysteem. Het is ontworpen om de belasting op databases en backendservices aanzienlijk te verminderen door veelgebruikte data, zoals databasequeryresultaten, API-antwoorden en sessiegegevens, te cachen. Dit versnelt dynamische webapplicaties door data in key-value vorm volledig in het RAM-geheugen op te slaan en zo een minimale toegangstijd te garanderen.
Als krachtig lokaal webontwikkelplatform heeft ServBay een geïntegreerde Memcached-service waarmee ontwikkelaars eenvoudig in-memory caching kunnen benutten binnen hun lokale ontwikkelstack. In dit artikel leer je hoe je Memcached in ServBay beheert en gebruikt, waaronder het activeren, de basisoperaties, verbindingsmethoden, configuratie en enkele best practices.
Memcached Installeren en Configureren
ServBay wordt standaard geleverd met Memcached. Er zijn geen extra installatiehandelingen nodig; Memcached is beschikbaar als een kernpakket van ServBay.
Het Memcached-pakket activeren en beheren
Je kunt de status van het Memcached-pakket (starten, stoppen, herstarten) beheren via de grafische ServBay Beheerder of met de commandoregeltool servbayctl
.
Via het ServBay Beheerplatform
- Open het ServBay Beheerplatform.
- Navigeer naar het menu-item
Pakketten
aan de linkerzijde. - Zoek in de lijst met pakketten onder de categorie
NoSQL
naarMemcached
. - Hier kun je de Memcached-service eenvoudig starten, stoppen of herstarten.
Via de commandoregeltool servbayctl
Voor ontwikkelaars die de terminal prefereren, kan de Memcached-service worden beheerd met de servbayctl
-opdrachten.
bash
# Memcached-service starten
servbayctl start memcached -all
# Memcached-service stoppen
servbayctl stop memcached -all
# Memcached-service herstarten
servbayctl restart memcached -all
# Status van de Memcached-service opvragen
servbayctl status memcached -all
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Let op: servbayctl
-opdrachten zijn meestal van toepassing op de op dat moment actieve Memcached-versie binnen ServBay.
Memcached Configureren
ServBay biedt een gebruiksvriendelijke, grafische configuratie-interface voor Memcached en voorkomt zo het gedoe van handmatig ingewikkelde configuratiebestanden bewerken. Je kunt via het Beheerplatform parameters instellen zoals het maximale geheugen, luisteradressen, poortnummers, enzovoort.
Zie het document Memcached Configuratie Aanpassen voor details over het wijzigen en optimaliseren van Memcached-instellingen in ServBay. Het goed instellen van deze parameters is essentieel voor de prestaties en het geheugengebruik van Memcached.
Verbinden met Memcached
Standaard luistert Memcached op poort 11211
van localhost
. Je kunt verbinding maken via diverse methoden, waaronder commandoregeltools en clientbibliotheken voor verschillende programmeertalen.
Verbinden met commandoregeltools
Met tools zoals telnet
of nc
(netcat) kun je rechtstreeks communiceren met de Memcached-service en protocolcommando's uitvoeren.
Verbinding met telnet:
bashtelnet localhost 11211
1Na succesvolle verbinding kun je Memcached-commando's zoals
version
(voor de versie) ofstats
(voor statistieken) invoeren. Typequit
om af te sluiten.Verbinding met nc:
bashnc localhost 11211
1Ook hier kun je direct Memcached-opdrachten typen na verbinding. Gebruik Ctrl+C om te stoppen.
Verbind via programmeertaal-clients
De meeste moderne programmeertalen voorzien in volwassen Memcached-clients, waardoor je eenvoudig Memcached in de applicatiecode integreert.
Python Voorbeeld
Gebruik pylibmc
(aanbevolen, gebaseerd op libmemcached) of python-memcached
om verbinding te maken met Memcached:
Indien je geen virtuele omgeving gebruikt, of een globale installatie wenst, kun je de clientbibliotheek met pip installeren:
bash
pip install pylibmc
# Of
pip install python-memcached
1
2
3
2
3
Daarna in je Python-code, verbinden en gebruiken van Memcached:
python
import pylibmc
# Verbinden met de Memcached-service, host en port specificeren
# pylibmc standaardpoort is 11211
mc = pylibmc.Client(["localhost:11211"], binary=True)
# Key-value paar instellen
# set(key, value, time=0, min_compress_len=0)
# time=0 betekent geen verloop (blijft tot de Memcached-geheugenstrategie het verwijdert)
mc.set("my_python_key", "Hello from Python!", time=3600) # 1 uur cachen
# Waarde ophalen
value = mc.get("my_python_key")
if value:
print(f"Waarde opgehaald uit Memcached: {value.decode('utf-8')}") # pylibmc levert bytes terug
else:
print("Key 'my_python_key' bestaat niet of is verlopen")
# Key verwijderen
mc.delete("my_python_key")
print("Key 'my_python_key' is verwijderd")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
PHP Voorbeeld
De meest gebruikte Memcached-extensie voor PHP is Memcached
. ServBay biedt deze meestal standaard aan.
Controleer eerst of het Memcached
-extensie is geactiveerd voor je gewenste PHP-versie in ServBay. Dit regel je via het PHP-configuratiescherm van het beheerplatform.
Daarna kan je als volgt verbinden en werken met Memcached in PHP:
php
<?php
// Maak een Memcached-client instantie aan
$memcached = new Memcached();
// Voeg Memcached-server toe aan de pool
// addServer(host, port, weight=0)
$memcached->addServer("localhost", 11211);
// Controleer (optioneel) of de verbinding lukt (client is meestal lui)
if (!$memcached->getStats()) {
echo "Kan geen verbinding maken met de Memcached-server! Controleer of Memcached draait en de poort klopt.\n";
// Afhandelen volgens je applicatielogica
} else {
echo "Succesvol verbonden met Memcached-server.\n";
// Key-value paar instellen
// set(key, value, expiration=0)
// expiration=0 betekent geen verloop (tot strategie het verwijdert)
$memcached->set("my_php_key", "Hello from PHP!", 3600); // 1 uur cache
echo "Key 'my_php_key' succesvol ingesteld.\n";
// Key ophalen
$value = $memcached->get("my_php_key");
if ($value !== false) {
echo "Waarde uit Memcached: " . $value . "\n";
} else {
// Memcached::get() retourneert false als de key ontbreekt of er een fout is
// Gebruik getResultCode() voor details
if ($memcached->getResultCode() == Memcached::RES_NOTFOUND) {
echo "Key 'my_php_key' bestaat niet of is verlopen.\n";
} else {
echo "Fout bij het ophalen van 'my_php_key': " . $memcached->getResultMessage() . "\n";
}
}
// Key verwijderen
if ($memcached->delete("my_php_key")) {
echo "Key 'my_php_key' is verwijderd.\n";
} else {
echo "Verwijderen van 'my_php_key' is mislukt.\n";
}
}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Werken met Memcached-data-cache
De kerntaak van Memcached draait om eenvoudige key-value operaties. Goed begrip van deze commando's is essentieel bij het gebruik van Memcached. Hieronder volgen enkele basisvoorbeelden die je kunt uitvoeren via de commandoregel (zoals telnet
of nc
).
Let op: In real-life ontwikkeling gebruik je doorgaans clientbibliotheken in een programmeertaal, die deze commando's onderliggend afhandelen.
Voorbeelden van Basiscommando’s
Na verbinden met Memcached (telnet localhost 11211
):
Key-value instellen (set): Gebruikt om een waarde op te slaan. Bestaat het key al, wordt de waarde bijgewerkt.
bashset mykey 0 900 11 Hello, Memcached!
1
2mykey
: De key.0
: Flags; 32-bits unsigned integer, opgeslagen samen met de data, bij ophalen ook teruggegeven. Vrij te gebruiken door de client (bijvoorbeeld om serialisatie aan te geven).900
: Vervaltijd in seconden.0
= nooit verlopen (tenzij uit het geheugen geëvicted), 0 < t < 2592000 (30d) = aantal seconden vanaf nu, ≥2592000 = UNIX-timestamp.11
: Lengte van de data in bytes. Op de volgende regel volgt de daadwerkelijke data. Druk op Enter, en na 'STORED' is de opslag gelukt.
Key-value toevoegen (add): Slaat alleen op als de key nog niet bestaat. Bestaat deze wel, krijg je een foutmelding.
bashadd anotherkey 0 60 5 World
1
2Als
anotherkey
nog niet bestaat: geeftSTORED
. Anders:NOT STORED
.Key-value vervangen (replace): Slaat alleen op als de key al bestaat. Anders faalt de opdracht.
bashreplace mykey 0 300 18 New value for key!
1
2Als
mykey
bestaat:STORED
. Niet:NOT STORED
.Waarde ophalen (get): Haalt de bijbehorende waarde op.
bashget mykey anotherkey
1Geeft ongeveer het volgende:
VALUE mykey 0 18 New value for key! VALUE anotherkey 0 5 World END
1
2
3
4
5END
geeft het einde van de opgehaalde waarden aan.Key verwijderen (delete): Verwijdert de opgegeven key.
bashdelete mykey
1Succes =
DELETED
. Bestaat de key niet:NOT FOUND
.
Overwegingen voor back-up en herstel
Cruciaal om te weten: Memcached is een in-memory (RAM) cache. Dat betekent dat alle data wordt opgeslagen in het geheugen, zonder ingebouwde persistentie of automatische back-up. Herstart of stop je Memcached of is er een reboot, dan is de data weg.
De back-upfunctie van ServBay (voor instellingen, websites, databases, SSL-certificaten, etc.) is vooral bedoeld voor componenten met bestandsopslag, zoals databasebestanden van MySQL of PostgreSQL, ServBay-instellingen, websitebestanden en certificaten. De Memcached cache zelf wordt hiervoor niet meegeback-upt, gezien het ontwerp van Memcached als vluchtige, eenvoudig opnieuw op te bouwen cachelaag.
Voor Memcached duidt "back-up en herstel" dus doorgaans niet op bewaarpogingen van de cache-inhoud, maar op:
- Data-export: Voor speciale gevallen (zoals debugging of migratie) kun je Memcached-gegevens exporteren. Dit vereist custom scripts die verbinding maken, keys ophalen, en key-value-paren opslaan. Omdat Memcached geen officieel commando heeft om alle keys te traverseren (omwille van performance), maak je hiervoor vaak gebruik van
stats cachedump
(vereist uitgebreide logging), niet-standaard methoden, of hou je binnen je applicatie zelf keys bij. - Data-import: Het terugplaatsen van data gebeurt dan met een script dat data-invoerbestanden uitleest en met commando’s als
set
ofadd
terugschrijft naar Memcached.
Belangrijke tip: Voor de meeste toepassingen geldt dat Memcached-data altijd uit de bron (zoals een database) kan worden gereconstrueerd. Jouw applicatie moet goed omgaan met cacheverlies: wanneer data niet in de cache zit, herlaadt je applicatie deze uit de bron en vult de cache opnieuw. Er is dus geen nood om regulier back-up en herstel voor Memcached-cachedata op te zetten.
Prestatie-optimalisatie
De prestaties van Memcached worden sterk beïnvloed door configuratie en gebruik. Met de grafische interface van ServBay kun je eenvoudig de volgende essentiële instellingen bijstellen:
Geheugenoptimalisatie
Een kernparameter is het maximale geheugen dat aan Memcached wordt toegewezen (-m
optie/instelling).
- Stel een realistisch geheugenlimiet in: Gebruik het configuratiescherm van ServBay om het maximumgeheugen in te stellen. Genoeg geheugen voorkomt dat data vroegtijdig wordt verwijderd (gevikt), wat de cache-hitratio verhoogt. Te veel geheugen afsnoepen kan echter nadelig zijn voor andere processen; stem dit af op je systeem en eisen.
Verbindingsoptimalisatie
Stel het maximum aantal gelijktijdige connecties in (-c
optie).
- Pas het maximum connecties aan: Met het ServBay-configuratiescherm kun je het aantal concurrent connections (
-c
parameter) aanpassen. Gaat je toepassing veel simultane queries op Memcached uitvoeren, verhoog dan het maximum waar nodig.
Overige optimalisatietips
- Key-ontwerp: Kies korte, beschrijvende keys – niet te lang of te complex.
- Serialisatie van waarden: Kies een efficiënte serialisatiemethode (zoals JSON, MessagePack, Protocol Buffers), afhankelijk van je datatypes. Let op het evenwicht tussen snelheid en opslag.
- Cache-strategie: Stem uitlooptijden en vernieuwingsmethoden af (bijvoorbeeld: cache on read, cache flush on write), zodat data actueel en consistent blijft.
- Netwerk-latency: In ontwikkelomgevingen is vertraging via
localhost
verwaarloosbaar, maar in productie moet je Memcached zo dicht mogelijk bij je applicatieservers draaien.
Veiligheidsbeheer
Memcached heeft van zichzelf beperkte ingebouwde beveiliging. Het afschermen van de dienst is daarom belangrijk, vooral buiten de lokale ontwikkelomgeving. Binnen ServBay, waar standaard alleen geluisterd wordt op de lokale interface, is het risico laag, maar de volgende maatregelen zijn nuttig om te kennen:
Luisteradres beperken
- Bind alleen aan het lokale adres: Zorg via het ServBay-beheer dat Memcached luistert op
127.0.0.1
oflocalhost
(-l
parameter). Dit is standaard zo ingesteld, zodat Memcached niet direct blootstaat aan het netwerk. Stel Memcached nooit direct open op een publiek netwerk zonder gepaste beveiliging!
Gebruik van een firewall
- Firewallregels instellen: Hoewel ServBay Memcached standaard lokaal bindt, kun je extra veiligheid toevoegen door je besturingssysteem-firewall (zoals de macOS firewall, of
pf
) zo in te stellen dat toegang tot poort 11211 vanaf extern wordt geblokkeerd.
Authenticatie en encryptie (voor gevorderden)
Het Memcached-protocol kent geen ingebouwde authenticatie of encryptie. Wil je toegang mogelijk maken via onveilige netwerken, dan zijn er aanvullende maatregelen nodig:
- Gebruik van een SSH-tunnel: Versleutel communicatie tussen client en server via een veilige tunnel.
- Gebruik van een VPN: Plaats Memcached op een netwerksegment dat alleen via VPN bereikbaar is.
- Proxy gebruiken: Zet een proxy voor Memcached met ondersteuning voor authenticatie en TLS.
In de lokale ServBay-ontwikkelomgeving zijn deze maatregelen meestal niet nodig doordat Memcached standaard niet toegankelijk is van buitenaf.
Veelgestelde Vragen en Oplossingen
Geen verbinding mogelijk met Memcached
- Probleem: Je applicatie of terminal kan geen verbinding maken met
localhost:11211
. - Oplossingen:
- Controleer de Memcached-service: Open het ServBay-beheer, navigeer naar
Pakketten
->NoSQL
en controleer of Memcached draait. Of gebruikservbayctl status memcached
. Start indien nodig de service. - Check poort en luisteradres: Controleer of je verbindt met het juiste adres (
localhost
of127.0.0.1
) en poort (11211
). Controleer ook in de ServBay-configuratie of Memcached op het juiste adres luistert. - Firewall-controle: Kijk of een lokale firewall of beveiligingspakket niet alsnog verkeer op poort
11211
tegenhoudt.
- Controleer de Memcached-service: Open het ServBay-beheer, navigeer naar
Lage cache-hitratio
- Probleem: Je applicatie vindt zelden data in Memcached (cache miss), waardoor veelvuldig teruggevallen wordt op database of andere services.
- Oplossingen:
- Bestudeer je cache-strategie: Check je logica voor instellen (
set
) en ophalen van keys. Is je vervaltijd te kort? Wordt cache tijdig leeggemaakt of ververst bij datamutaties? - Controleer het geheugen: Is er genoeg geheugen ingesteld voor de cache? Is de
evictions
-waarde hoog, dan is er mogelijk nood aan meer geheugen. Pas dit aan via het configuratiescherm van ServBay en checkstats
. - Analyseer key-structuren: Zijn je keys logisch en functioneel (geen overlappende keys, goede granulariteit)?
- Monitor Memcached-statistieken: Controleer via
telnet
met hetstats
-commando de ratio tussenget_hits
(gevonden) enget_misses
(niet gevonden). Een hogeevictions
-waarde duidt op structureel geheugen tekort.
- Bestudeer je cache-strategie: Check je logica voor instellen (
Samenvatting
Memcached is een eenvoudige, maar uiterst krachtige in-memory cache-oplossing die essentieel is voor hoogwaardige webapplicaties. ServBay – speciaal ontworpen voor ontwikkelaars – integreert Memcached standaard en maakt het beheer en gebruik kinderlijk eenvoudig in de lokale ontwikkelomgeving.
Via de grafische interface en de servbayctl
-cli kun je Memcached soepel starten, stoppen en configureren. Met de beschreven verbindingsmethoden, basishandelingen en de adviezen rondom prestatie en beveiliging kun je Memcached optimaal inzetten tijdens de ontwikkeling en het testen van je applicaties. Onthoud: goed begrip van de geheugenkarakteristieken van Memcached is cruciaal voor het ontwikkelen van een effectieve cachestrategie.