Redis ist ein speicherbasiertes Datenspeichersystem, daher ist es grundsätzlich flüchtig. Wenn der Redis-Server neu gestartet wird, können alle Daten verschwinden. Um dies zu verhindern, bietet Redis zwei Datenspeicherungsoptionen: RDB (Redis Database Snapshot) und AOF (Append-Only File). In diesem Beitrag werden die Charakteristika und Unterschiede beider Methoden betrachtet sowie die jeweiligen Einstellungen, Vor- und Nachteile zusammengefasst.

1. RDB (Redis Database Snapshot)

RDB speichert die im Speicher abgelegten Daten regelmäßig in Form von Snapshots auf der Festplatte. Redis erstellt RDB-Dateien basierend auf einem festgelegten Zeitintervall und ermöglicht die Datenwiederherstellung beim Neustart des Servers.

Hauptmerkmale von RDB

  • Speicherintervall: Im redis.conf Datei kann das Speichintervall für die Festplatte durch die save-Option konfiguriert werden. Zum Beispiel save 60 1000 erzeugt einen Snapshot, wenn mehr als 1000 Schlüssel innerhalb von 60 Sekunden geändert wurden.
save 60 1000
  • Speicherort: RDB-Dateien werden standardmäßig im Verzeichnis gespeichert, das im dir festgelegt ist. Der Standardpfad ist /var/lib/redis und der Dateiname ist dump.rdb.
dir /var/lib/redis/
dbfilename dump.rdb

Vorteile von RDB

  • Hohe Leistung: Die RDB-Methode hat keinen wesentlichen Einfluss auf die Leistung von Redis und verbraucht auch bei langen Snapshot-Intervallen kaum CPU-Ressourcen.
  • Kleine Dateigröße: Durch die regelmäßige Speicherung aller Daten als Snapshot ist die Dateigröße relativ klein und die Backup-Verwaltung ist einfach.

Nachteile von RDB

  • Risiko des Datenverlusts: Da RDB regelmäßig speichert, könnte die Daten nach dem letzten Snapshot verloren gehen, wenn Redis plötzlich stoppt.
  • Wiederherstellungsgeschwindigkeit: Da RDB alle Daten auf einmal als Snapshot speichert, kann es länger dauern, große Datenmengen wiederherzustellen.

Geeignete Anwendungsfälle für RDB

RDB eignet sich insbesondere für Cache-Daten, bei denen regelmäßige Backups kein Problem darstellen. Es ist vorteilhaft, wenn regelmäßige Datenbackups erforderlich sind, anstatt Echtzeit-Workflow-Queues. So wird die Leistung des Redis-Servers aufrechterhalten, während eine einfache Persistenz gewährleistet wird.

2. AOF (Append-Only File)

AOF bietet eine kontinuierliche Datenspeicherung, indem alle Schreibvorgänge von Redis sequenziell auf die Festplatte geschrieben werden. AOF-Dateien zeichnen alle Änderungen der Daten auf, sodass die Daten auch nach einem Neustart des Redis-Servers vollständig wiederhergestellt werden können.

Hauptmerkmale von AOF

  • Aufzeichnungsstil der Befehle: AOF-Dateien protokollieren alle Befehle zur Datenänderung. Jedes Mal, wenn ein Schreibbefehl auftritt, wird dies auf der Festplatte gespeichert, sodass alle Änderungsprotokolle erhalten bleiben.
  • Speicherort und Name der Datei: AOF-Dateien werden unter dem Namen gespeichert, der in der appendfilename-Option festgelegt ist. Der Standardwert ist appendonly.aof, und sie werden im durch dir eingerichteten Verzeichnis gespeichert.
dir /var/lib/redis/
appendonly yes
appendfilename appendonly.aof
  • Synchronisationsintervall: Das Intervall, in dem die Daten auf die Festplatte geschrieben werden, kann mit der appendfsync-Option festgelegt werden.
appendfsync everysec  # Synchronisieren jede Sekunde

Vorteile von AOF

  • Datenpersistenz: Da alle Schreibvorgänge auf die Festplatte protokolliert werden, können die Daten bis zum letzten gespeicherten Status wiederhergestellt werden, selbst wenn der Server plötzlich stoppt.
  • Keine Aufzeichnung von Leseoperationen: AOF protokolliert nur alle Befehle zur Datenänderung, wodurch unnötige Leseoperationen nicht in der Datei enthalten sind und Speicherplatz gespart wird.
Infografik über die Datenspeicherungsoptionen von Redis

Nachteile von AOF

  • Leistungseinbußen: Da alle Schreibvorgänge auf die Festplatte aufgezeichnet werden, kann die Leistung, insbesondere wenn appendfsync auf always eingestellt ist, beeinträchtigt werden.
  • Wachstumsrate der Dateigröße: Bei häufigen Datenänderungen kann die Größe der AOF-Datei erheblich wachsen. Um dies zu beheben, kann Redis die AOF-Datei über den BGREWRITEAOF-Befehl komprimieren.

Geeignete Anwendungsfälle für AOF

AOF ist nützlich in Aufgabenwarteschlangen oder bei Anwendungen, bei denen Datenspeicherung wichtig ist. Wenn Datenpersistenz entscheidend ist, kann es in Verbindung mit der regelmäßigen Synchronisation (everysec) verwendet werden, um eine balance zwischen Leistung und Datenspeicherung zu finden.

3. Gleichzeitige Verwendung von RDB und AOF

In Redis ist es möglich, RDB und AOF gleichzeitig zu verwenden, um eine ausgewogene Datenpersistenz und Leistung zu gewährleisten. Wenn beide Methoden aktiviert sind, priorisiert Redis die AOF-Datei für die Wiederherstellung.

  • RDB: Speichert Daten schnell und einfach und bietet grundlegende Backups im Snapshot-Stil.
  • AOF: Protokolliert alle Schreibvorgänge, um die Datenpersistenz zu erhöhen, wodurch das Risiko eines Datenverlusts minimiert werden kann.

4. Beispiel für Redis-Konfiguration

Im Folgenden finden Sie ein Beispiel für eine Konfiguration, die sowohl RDB als auch AOF verwendet und eine angemessene Leistung und Datenpersistenz aufrechterhält.

# Redis Standardverzeichnis- und Dateieinstellungen
dir /var/lib/redis/
dbfilename dump.rdb
appendfilename appendonly.aof

# RDB Snapshot-Einstellungen (Snapshot speichern, wenn mehr als 1000 Schlüssel in 60 Sekunden geändert werden)
save 60 1000

# AOF-Einstellungen
appendonly yes
appendfsync everysec  # Synchronisation an die Festplatte jede Sekunde

# AOF-Datei Neuaufzeichnungs-Einstellungen (automatische Neuaufzeichnung, wenn die Dateigröße über 64MB wächst und um 100% zunimmt)
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

Fazit

In diesem Post haben wir die beiden Datenspeicherungsmethoden von Redis, RDB und AOF, untersucht. Beide Methoden weisen Unterschiede in der Persistenz und Leistung auf, daher ist es wichtig, die geeignete Methode je nach Eigenschaft der Anwendung zu wählen. Im nächsten Teil wird die Speicherverwaltung und Leistungsoptimierung in Redis behandelt und es werden Möglichkeiten vorgestellt, wie man den Speicher von Redis effizient nutzen kann.