EQVPS
DashboardAan de slag

Redis installeren op een VPS: geheugenlimiet, persistentie en een wachtwoord dat blijft

Installeer Redis op Ubuntu 24.04, begrens het geheugen zodat het niet de hele server inneemt, zet het append-only-bestand aan zonder je data te wissen en stel een wachtwoord in dat herstarts overleeft. In twee van deze stappen zitten valkuilen waar we op onze eigen testserver zelf in trapten.

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 met OOM 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 stopteAlleen snapshots (standaard)Met het append-only-bestand
systemctl restartNiets kwijt: het slaat op bij het afsluitenNiets kwijt
Afgeschoten met kill -9De sleutel van na de laatste snapshot was wegEen 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:

TestVerzoeken per secondeMediane latentie
SET30.3031,0 ms
GET35.1490,9 ms
SET, 16 opdrachten per rondgang272.1092,4 ms
GET, 16 opdrachten per rondgang414.9381,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.

FAQ

Hoeveel RAM heeft Redis nodig?

Redis zelf is piepklein: 13,5 MB direct na de installatie op onze server. Wat het nodig heeft, is ruimte voor je data, want die staat in het geheugen. Zet maxmemory op wat de server kan missen, bijvoorbeeld 256 MB op een server met 1 GB, en kies wat er gebeurt als het vol is.

Redis of Valkey?

Valkey is een fork van Redis die begon bij Redis 7.2 en hetzelfde protocol spreekt, dus de meeste clients werken met beide. Ubuntu 24.04 levert alleen Redis 7.0.15. Debian 13 heeft Redis 8.0 en Valkey 8.1, en Debian 12 krijgt Valkey 8.0 via backports. De stappen in deze gids gelden voor allebei.

Waarom verliest Redis data na een crash?

Standaard schrijft Redis om de paar minuten een snapshot naar schijf, afhankelijk van hoeveel sleutels er veranderd zijn. Toen we het proces afschoten, was de sleutel die na de laatste snapshot was geschreven verdwenen. Zet het append-only-bestand aan, dat elke seconde schrijft, en een crash kost je hooguit ongeveer een seconde aan schrijfacties.

Ik heb requirepass aan redis.conf toegevoegd, waarom accepteert Redis nog steeds opdrachten zonder wachtwoord?

Waarschijnlijk omdat CONFIG REWRITE ooit is uitgevoerd. Onder Redis 7 zet dat de regel user default on nopass ~* &* +@all onderaan redis.conf, en die regel heft een hoger geplaatste requirepass op. Stel het wachtwoord in met CONFIG SET requirepass en daarna CONFIG REWRITE, dan bewaart Redis het in die regel.

Kan ik poort 6379 openzetten naar internet?

Liever niet. Open Redis-poorten worden voortdurend gescand en zijn een veelgebruikte weg naar binnen. Bereik Redis vanaf je computer via een SSH-tunnel, of houd het op dezelfde server als de app die het gebruikt.

Reacties

Nog geen reacties. Wees de eerste.

Laat een reactie achter

Reacties worden gemodereerd voordat ze verschijnen.