Redis biedt een methode voor het permanent opslaan van gegevens op de schijf met behulp van AOF (Append-Only File). Maar na verloop van tijd kan de grootte van het AOF-bestand toenemen, wat kan leiden tot prestatieproblemen en schijfruimteproblemen. Om dit op te lossen, heeft Redis de AOF Rewrite (herwriting, compressie) functie. In dit artikel zullen we in detail bekijken wat AOF Rewrite is, hoe het werkt en hoe je het instelt.


1. Wat is AOF (Append-Only File)? Waarom is Rewrite nodig?

Redis gebruikt AOF-bestanden om alle schrijfbewerkingen sequenteel vast te leggen om gegevens permanent op te slaan. Bijvoorbeeld, wanneer een opdracht zoals SET key value wordt uitgevoerd, wordt dit elke keer naar het AOF-bestand geschreven. Dit zorgt ervoor dat gegevens kunnen worden hersteld, zelfs als de Redis-server opnieuw wordt opgestart.

Maar na verloop van tijd kunnen duplicaten voor dezelfde sleutel in het AOF-bestand worden toegevoegd, wat leidt tot een toename van de grootte en langere herstelperiodes.

Om dit op te lossen, wordt de AOF Rewrite (compressie, opruiming) functie aangeboden.


2. Wat is AOF Rewrite?

Redis AOF Rewrite Infographic

AOF Rewrite is het proces van het vervangen van het bestaande appendonly.aof bestand door een geoptimaliseerd nieuw bestand. Het bestaande AOF-bestand wordt bewaard terwijl er een nieuw bestand wordt aangemaakt en onnodige opdrachten worden verwijderd om de grootte te verminderen. Wat hierbij belangrijk is, is de opmerking het bestaande bestand vervangen na optimalisatie. Deze formulering vat de werking van de rewrite samen.

📌 Hoe AOF Rewrite werkt

  1. Redis wijzigt het bestaande AOF-bestand niet rechtstreeks, maar maakt een nieuw AOF-bestand aan.
  2. Het nieuwe bestand bevat alleen de minimale opdrachten die de meest recente status weerspiegelen.
  3. Als het bestaande AOF-bestand er bijvoorbeeld als volgt uitziet:
   SET key1 "hello"
   SET key1 "world"
   SET key1 "final"

Na AOF Rewrite wordt het geoptimaliseerd als volgt:

SET key1 "final"

Dat wil zeggen, zodra het nieuwe appendonly.aof.tmp bestand is aangemaakt, wordt het bestaande bestand verwijderd en vervangen door het nieuwe bestand (het tmp-bestand vervangt het aof-bestand).


3. Hoe stel je AOF Rewrite in?

✅ Automatische AOF Rewrite-instelling

Redis kan automatisch AOF Rewrite uitvoeren. Dit wordt ingesteld in redis.conf als volgt:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
  • auto-aof-rewrite-percentage 100: Als de bestandsgrootte na de laatste AOF Rewrite met 100% (dubbel) of meer is toegenomen, wordt de rewrite uitgevoerd
  • auto-aof-rewrite-min-size 64mb: De AOF-bestand wordt alleen herschreven als het minimaal 64 MB is

Dat wil zeggen, als de bestaande AOF-bestandsgrootte 50 MB is en deze 100 MB wordt, wordt de rewrite automatisch uitgevoerd.

Het is aan te raden om beide opties altijd samen in te stellen. Als je geen waarde voor auto-aof-rewrite-min-size opgeeft, kan het zijn dat er onnodige rewrites plaatsvinden wanneer de bestandsgrootte van een AOF-bestand van 20 MB naar 40 MB stijgt. Door auto-aof-rewrite-min-size in te stellen, kun je ervoor zorgen dat de rewrite alleen wordt uitgevoerd wanneer de grootte boven een bepaalde waarde ligt.

Dat wil zeggen, als de bestaande AOF-bestandsgrootte 50 MB is en deze 100 MB wordt, zal de rewrite automatisch worden uitgevoerd.

✅ Handmatig AOF Rewrite uitvoeren

Door onderstaande opdracht uit te voeren, zal Redis onmiddellijk AOF Rewrite uitvoeren.

redis-cli BGREWRITEAOF

Wanneer deze opdracht wordt uitgevoerd, genereert Redis op de achtergrond een nieuw AOF-bestand en vervangt het bestaande bestand automatisch.


4. Resultaten van AOF Rewrite

Wanneer AOF Rewrite wordt uitgevoerd, worden in de datamap van Redis (/var/lib/redis etc.) de volgende bestanden aangemaakt.

ls /var/lib/redis

Voorbeeld output:

appendonly.aof
appendonly.aof.tmp  # tijdelijke bestanden aangemaakt tijdens rewrite
  • appendonly.aof.tmp: Het nieuwe geoptimaliseerde AOF-bestand aangemaakt tijdens AOF Rewrite.
  • appendonly.aof: Nadat de rewrite is voltooid, wordt het bestaande bestand verwijderd en vervangen door het nieuwe bestand.

🚨 AOF Rewrite comprimeert het bestaande AOF-bestand niet, maar genereert een nieuw AOF-bestand om het bestaande bestand te vervangen.


5. Wanneer moet AOF Rewrite worden gebruikt?

Wanneer het AOF-bestand te groot is en veel schijfruimte in beslag neemt - Redis blijft gegevens schrijven, dus na verloop van tijd neemt de bestandsgrootte toe. - Door onnodige commando's op te schonen, kun je de schijfgebruikskosten verlagen.

Als je de herstelsnelheid wilt versnellen bij het herstarten van Redis - Als het AOF-bestand groot is, moet Redis alle opdrachten uitvoeren om gegevens te herstellen tijdens het opnieuw opstarten, wat veel tijd kan kosten. - Door AOF Rewrite uit te voeren, kan de bestandsgrootte worden verkleind en wordt de herstelsnelheid verhoogd.

Als je de prestaties van Redis wilt optimaliseren - Als het AOF-bestand te groot is, kan de prestatie van Redis afnemen. - Door regelmatig AOF Rewrite uit te voeren, kan Redis stabieler draaien.


6. Verschillen tussen RDB-snapshots en AOF Rewrite

Vergelijking AOF (Append-Only File) RDB (Redis Database)
Opslagmethode Registreert alle schrijfbewerkingen Maakt regelmatig een dump van alle gegevens
Herstelsnelheid Langzaam (alle opdrachten moeten worden uitgevoerd) snel (herstel van binaire dump)
Mogelijkheid van gegevensverlies Laag (afhankelijk van fsync-instellingen) Er is een kans (afhankelijk van het snapshot-patroon)
Bestandsgrootte Groot (alle bewerkingen worden vastgelegd) Klein (alleen de meest recente status wordt opgeslagen)
Invloed op prestaties Hoog (alle bewerkingen worden gelogd) Laag (regelmatige dump wordt uitgevoerd)
Geschikte gebruiksdoeleinden Wanneer hoge duurzaamheid vereist is Wanneer snelle herstel vereist is

👉 Het is gebruikelijk om AOF + RDB samen in te stellen in een Redis-omgeving voor optimale prestaties en stabiliteit.


7. Conclusie en samenvatting

  • De AOF Rewrite van Redis wordt uitgevoerd om de bestandsgrootte van AOF te verkleinen en de herstelsnelheid te verbeteren.
  • Het werkt niet door het bestaande AOF-bestand rechtstreeks te bewerken, maar door een nieuw geoptimaliseerd AOF-bestand te genereren om het bestaande bestand te vervangen.
  • Door auto-aof-rewrite-percentage en auto-aof-rewrite-min-size goed in te stellen, kan AOF Rewrite automatisch worden uitgevoerd en kan de prestatie en opslagruimte effectief worden beheerd.
  • Wanneer het samen met RDB-snapshots wordt gebruikt, kunnen de duurzaamheid en prestaties van Redis gelijktijdig worden geoptimaliseerd.

📌 Zorg ervoor dat je AOF Rewrite effectief gebruikt om de prestaties van Redis te optimaliseren! 🚀

Als je naar redis zoekt in de zoekbalk aan de rechterkant, kun je meer artikelen over redis-configuratie vinden.

Als je meer uitleg over de concepten van RDB en AOF wilt, raden we ook dit artikel aan.

Redis Deel 2: Opties voor gegevensbehoud in Redis - RDB vs AOF