Redis bietet eine Methode zur permanenten Speicherung von Daten auf der Festplatte über AOF (Append-Only File). Mit der Zeit kann die AOF-Dateigröße jedoch die Leistung beeinträchtigen und Speicherplatzprobleme verursachen. Um dies zu lösen, bietet Redis die Funktion AOF Rewrite (Neuschreiben, Komprimierung). In diesem Artikel werden wir erläutern, was AOF Rewrite ist, wie es funktioniert und wie man es konfiguriert.


1. Was ist AOF (Append-Only File)? Warum ist ein Rewrite erforderlich?

Um Daten dauerhaft zu speichern, verwendet Redis eine AOF-Datei, um alle Schreiboperationen sequenziell zu protokollieren. Jedes Mal, wenn ein Befehl wie SET key value ausgeführt wird, wird dies in der AOF-Datei protokolliert. Dadurch kann Redis auch nach einem Neustart des Servers die Daten wiederherstellen.

Mit der Zeit sammeln sich jedoch duplizierte Befehle für denselben Schlüssel in der AOF-Datei, was zu einer Vergrößerung der Dateigröße und längeren Wiederherstellungszeiten führt.

Um dies zu beheben, wird die Funktion AOF Rewrite (Komprimierung, Bereinigung) angeboten.


2. Was ist AOF Rewrite?

Redis AOF Rewrite Infographic

AOF Rewrite ist der Prozess, bei dem die vorhandene appendonly.aof Datei durch eine optimierte neue Datei ersetzt wird. Dabei wird die bestehende AOF-Datei beibehalten, während eine neue Datei erstellt wird, und unnötige Befehle entfernt werden, um die Größe zu reduzieren. Ein wichtiger Punkt hierbei ist die Formulierung: nach der Optimierung die bestehende Datei ersetzen. Diese Aussage fasst die Funktionsweise des Rewrite zusammen.

📌 Funktionsweise von AOF Rewrite

  1. Redis ändert die bestehende AOF-Datei nicht direkt, sondern erstellt eine neue AOF-Datei.
  2. Die neue Datei enthält minimale Befehle, die nur den aktuellen Zustand widerspiegeln.
  3. Wenn die vorhandene AOF-Datei also wie folgt aussieht:
   SET key1 "hello"
   SET key1 "world"
   SET key1 "final"

Nach dem AOF Rewrite wird sie wie folgt optimiert:

SET key1 "final"

Sobald die neue appendonly.aof.tmp Datei erstellt ist, wird die bestehende Datei gelöscht und durch die neue Datei ersetzt (die tmp-Datei ersetzt die AOF-Datei).


3. Konfiguration von AOF Rewrite

✅ Automatische AOF Rewrite-Konfiguration

Redis kann so konfiguriert werden, dass AOF Rewrite automatisch ausgeführt wird. In der redis.conf werden die folgenden Einstellungen vorgenommen:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
  • auto-aof-rewrite-percentage 100: Wenn die Dateigröße um 100 % (doppelt) oder mehr zunimmt, wird ein Rewrite durchgeführt.
  • auto-aof-rewrite-min-size 64mb: Der Rewrite erfolgt nur, wenn die AOF-Datei mindestens 64 MB groß ist.

Das bedeutet, wenn die Größe der bestehenden AOF-Datei 50 MB beträgt und danach 100 MB erreicht, wird der Rewrite automatisch ausgeführt.

Es ist ratsam, diese beiden Optionen immer zusammen einzustellen. Wenn der Wert von auto-aof-rewrite-min-size nicht angegeben wird, kann es zu unnötigen Rewrites kommen, wenn die vorherige AOF-Dateigröße 20 MB beträgt und die Datei auf 40 MB anwächst. Daher stellt die Einstellung von auto-aof-rewrite-min-size sicher, dass der Rewrite nur ausgeführt wird, wenn die Größe einen bestimmten Punkt überschreitet.

Das bedeutet, wenn die Größe der bestehenden AOF-Datei 50 MB beträgt und danach 100 MB erreicht, wird der Rewrite automatisch ausgeführt.

✅ Manuelles Ausführen von AOF Rewrite

Durch Ausführen des folgenden Befehls wird Redis sofort AOF Rewrite durchführen.

redis-cli BGREWRITEAOF

Wenn dieser Befehl ausgeführt wird, generiert Redis im Hintergrund eine neue AOF-Datei, und der Austausch mit der vorhandenen Datei wird automatisch durchgeführt.


4. Ergebnisse von AOF Rewrite

Wenn AOF Rewrite ausgeführt wird, werden im Datenverzeichnis von Redis (/var/lib/redis usw.) die folgenden Dateien erstellt.

ls /var/lib/redis

Beispielausgabe:

appendonly.aof
appendonly.aof.tmp  # temporäre Datei, die während des Rewrites erstellt wurde
  • appendonly.aof.tmp: Neue optimierte AOF-Datei, die während des AOF Rewrite erstellt wurde.
  • appendonly.aof: Nach Abschluss des Rewrites wird die bestehende Datei gelöscht und durch die neue Datei ersetzt.

🚨 AOF Rewrite komprimiert nicht die bestehende AOF-Datei, sondern erstellt eine neue AOF-Datei und ersetzt die bestehende Datei.


5. Wann sollte AOF Rewrite verwendet werden?

Wenn die Größe der AOF-Datei zu groß wird und viel Speicherplatz beansprucht - Da Redis kontinuierlich Daten schreibt, wächst die Dateigröße im Laufe der Zeit. - Unnötige Befehle zu bereinigen, kann die Speichernutzung reduzieren.

Wenn Sie die Wiederherstellungsgeschwindigkeit beim Neustart von Redis beschleunigen möchten - Wenn die AOF-Dateigröße groß ist, muss Redis alle Befehle ausführen, um die Daten wiederherzustellen, was Zeit in Anspruch nimmt. - Durch die Durchführung eines AOF Rewrites wird die Dateigröße verkleinert und die Wiederherstellungsgeschwindigkeit erhöht.

Wenn Sie die Leistung von Redis optimieren möchten - Wenn die AOF-Datei zu groß wird, kann dies die Leistung von Redis beeinträchtigen. - Durch regelmäßige AOF Rewrites kann Redis stabiler betrieben werden.


6. Unterschiede zwischen RDB-Snapshots und AOF Rewrite

Vergleichspunkt AOF (Append-Only File) RDB (Redis Database)
Speicherweise Protokolliert alle Schreiboperationen Dump der gesamten Daten in bestimmten Intervallen
Wiederherstellungsgeschwindigkeit Langsam (alle Befehle müssen ausgeführt werden) Schnell (Wiederherstellung des Binär-Dumps)
Risiko von Datenverlust Niedrig (hängt von den fsync-Einstellungen ab) Kann auftreten (hängt vom Snapshot-Zyklus ab)
Dateigröße Groß (alle Operationen werden protokolliert) Klein (nur der aktuelle Zustand wird gespeichert)
Einfluss auf die Leistung Hoch (alle Operationen werden im Protokoll erfasst) Niedrig (periodische Dumps)
Geeignet für Fälle mit hoher Haltbarkeit Fälle, die schnelle Wiederherstellung erfordern

👉 In Produktionsumgebungen ist es üblich, AOF + RDB zusammen zu konfigurieren, um optimale Leistung und Stabilität zu gewährleisten.


7. Fazit und Zusammenfassung

  • Das AOF Rewrite von Redis wird durchgeführt, um die Größe der AOF-Datei zu reduzieren und die Wiederherstellungsgeschwindigkeit zu verbessern.
  • Es wird nicht direkt die bestehende AOF-Datei geändert, sondern eine neue optimierte AOF-Datei erstellt, um die bestehende Datei zu ersetzen.
  • Durch die geeignete Konfiguration von auto-aof-rewrite-percentage und auto-aof-rewrite-min-size kann AOF Rewrite automatisch durchgeführt werden, um Leistung und Speicherplatz effizient zu verwalten.
  • In Kombination mit RDB-Snapshots kann die Haltbarkeit und Leistung von Redis gleichzeitig optimiert werden.

📌 Nutzen Sie AOF Rewrite angemessen, um die Leistung von Redis zu optimieren! 🚀

Wenn Sie im Suchfeld rechts nach redis suchen, finden Sie viele weitere Artikel zu den Redis-Einstellungen.

Falls Sie eine Klärung der Konzepte von RDB und AOF benötigen, empfehle ich auch den folgenden Artikel.

Redis Teil 2: Redis Datenpersistenz Optionen - RDB vs AOF