Redis houdt data in het geheugen en antwoordt in ongeveer een milliseconde. Daarom zit het achter zoveel apps, als cache, wachtrij of sessie-opslag. De installatie is één opdracht. Het werk zit in de standaardinstellingen: geen geheugenlimiet, snapshots die recente schrijfacties kunnen verliezen, en twee makkelijke fouten die stilletjes je data wissen of je wachtwoord uitschakelen. Deze gids behandelt het allemaal op Ubuntu 24.04. We hebben elke stap op onze image uitgevoerd; de cijfers komen van een Micro-server (2 vCPU, 2 GB).
Je hebt een gebruiker met sudo nodig. De Ubuntu-installatiegids maakt er een aan.
1. Installeren
sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping
De installatie duurde 13 seconden en leverde Redis 7.0.15 op. Het start meteen en bij elke boot, antwoordt PONG en luistert alleen op de server zelf: 127.0.0.1:6379 en [::1]:6379, met protected-mode yes. Zonder data gebruikte het 13,5 MB RAM.
In het log stond al een waarschuwing:
WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.
Redis schrijft naar schijf vanuit een kopie van zichzelf die via fork wordt gemaakt, en met de standaardinstelling van de kernel kan die fork mislukken als het geheugen krap is. Los het één keer op:
echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server
Na de herstart was de waarschuwing weg.
2. Het geheugen begrenzen
Standaard staat maxmemory op 0, dus zonder limiet, en het beleid is noeviction. Redis blijft RAM pakken tot de server op is. Stel een plafond in en bepaal wat er gebeurt als dat bereikt is:
redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE
We testten beide beleidsregels met een limiet van 64 MB en 400.000 schrijfacties:
noeviction(standaard): het geheugen stopte op 63 MB en nieuwe schrijfacties faalden metOOM command not allowed when used memory > 'maxmemory'. Juist voor een wachtrij of alles wat je niet kwijt mag raken.allkeys-lru: Redis gooide de langst niet gebruikte sleutels weg, 48.606 stuks, en elke schrijfactie ging door. Juist voor een cache.
CONFIG REWRITE slaat de lopende instellingen op in /etc/redis/redis.conf, zodat ze een herstart overleven. Het voegt ook een regel toe die je vóór stap 4 moet kennen.
3. Kiezen hoe het naar schijf schrijft
Standaard schrijft Redis een snapshot (/var/lib/redis/dump.rdb) na 1 wijziging in een uur, 100 in vijf minuten of 10.000 in een minuut. We testten drie manieren om het te stoppen:
| Hoe Redis stopte | Alleen snapshots (standaard) | Met het append-only-bestand |
|---|---|---|
systemctl restart | Niets kwijt: het slaat op bij het afsluiten | Niets kwijt |
Afgeschoten met kill -9 | De sleutel van na de laatste snapshot was weg | Een sleutel van 2 seconden voor de kill was er nog |
In beide gevallen startte systemd Redis binnen enkele seconden vanzelf opnieuw.
Bewaart Redis data die je zou missen, zet dan het append-only-bestand (AOF) aan. Het legt elke schrijfactie vast en zet die eens per seconde op schijf. Doe dit op de draaiende server, niet door het bestand te bewerken:
redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_
We probeerden eerst de andere manier, en dat kostte ons onze data. We veranderden appendonly no in appendonly yes in redis.conf en herstartten. Redis kwam terug met een lege AOF en laadde niets uit de snapshot, dus alle bestaande sleutels waren weg. Bij het volgende afsluiten schreef het zijn nieuwe inhoud, zonder de oude sleutels, ook nog over dump.rdb heen. CONFIG SET voorkomt dat: Redis schrijft de AOF eerst vanuit de data in het geheugen. Na een herstart waren al onze sleutels er.
Is Redis een pure cache die leeg mag starten, doe dan het omgekeerde en zet opslaan uit met redis-cli CONFIG SET save "".
4. Een wachtwoord instellen
Hier zit de tweede valkuil. Na elke CONFIG REWRITE zet Redis 7 deze regel onderaan redis.conf:
user default on nopass ~* &* +@all
Die betekent "de standaardgebruiker heeft geen wachtwoord nodig". Daarna voegden we requirepass hoger in het bestand toe en herstartten. Redis antwoordde nog steeds PONG zonder wachtwoord, omdat de user-regel voorgaat. Stel het wachtwoord in via Redis zelf:
REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE
Bewaar het wachtwoord op een veilige plek. Redis slaat het nu op als SHA-256-hash in diezelfde user default-regel. Na een herstart antwoordde redis-cli ping met NOAUTH Authentication required. en werkte alleen het wachtwoord. Geef het aan redis-cli via de variabele REDISCLI_AUTH. Met -a verschijnt het in de proceslijst, en redis-cli waarschuwt daarvoor. Zet het in je app in de Redis-URL: redis://:PASSWORD@127.0.0.1:6379/0.
5. Vanaf je computer erbij komen
Laat Redis op 127.0.0.1 staan en gebruik een SSH-tunnel. Gebruik de SSH-poort van je server; bij NAT-pakketten is dat je persoonlijke poort:
ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22
Zolang dat draait, praten redis-cli -p 6380 en desktoptools op je computer met de Redis op de server. Er staat niets nieuws open naar internet. Met de gids voor SSH-sleutels logt de tunnel in zonder wachtwoord.
Hoe snel het is
Op de Micro-testserver gaf redis-benchmark met 50 clients:
| Test | Verzoeken per seconde | Mediane latentie |
|---|---|---|
| SET | 30.303 | 1,0 ms |
| GET | 35.149 | 0,9 ms |
| SET, 16 opdrachten per rondgang | 272.109 | 2,4 ms |
| GET, 16 opdrachten per rondgang | 414.938 | 1,3 ms |
Voor de cache of takenwachtrij van een webapp is dat veel meer dan je nodig hebt. De extra snelheid komt van het in batches versturen van opdrachten (pipelining).
Welk pakket
Redis heeft RAM nodig voor je data en weinig anders. Nano (2 vCPU, 1 GB, $3/maand) draait Redis naast een kleine app met maxmemory 256mb. Micro (2 GB, $5/maand) laat ruimte voor een grotere cache plus de app. Moet iets anders rechtstreeks met Redis verbinden, neem dan een eigen IPv4 (vanaf Nano-IP voor $8/maand) en sta in de firewall alleen dat ene adres toe. Alle pakketten staan op de pagina VPS, en betalen gaat in USDT, USDC of ETH via Base, Ethereum of Polygon.
Reacties
Nog geen reacties. Wees de eerste.