Behält Redis Daten bei?

122

Ich verstehe, dass Redis alle Daten aus dem Speicher bereitstellt, aber auch nach dem Neustart des Servers bestehen bleibt, sodass beim Neustart des Servers alle Daten von der Festplatte in den Speicher eingelesen werden. Oder ist es immer ein leerer Speicher, in dem nur Daten gespeichert werden, während Apps ohne Persistenz ausgeführt werden?

Zuriar
quelle
1
Ich bin mir nicht sicher, ob ich Ihre Frage richtig verstehe. Sie können den Snapshot auf der Festplatte speichern und aus dieser Datei lesen. Wenn Sie dies nicht tun, ist Ihre Redis-Datenbank beim Neustart leer.
Sefa

Antworten:

81

Ich schlage vor, Sie lesen dies auf http://redis.io/topics/persistence . Grundsätzlich verlieren Sie die garantierte Persistenz, wenn Sie die Leistung steigern, indem Sie nur In-Memory-Speicher verwenden. Stellen Sie sich ein Szenario vor, in dem Sie INSERT in den Speicher einfügen, aber bevor es auf der Festplatte verbleibt, verlieren Sie Strom. Es kommt zu Datenverlust.

Redis unterstützt sogenannte "Snapshots". Dies bedeutet, dass zu bestimmten Zeitpunkten (z. B. jede volle Stunde) eine vollständige Kopie des Speichers erstellt wird. Wenn Sie zwischen zwei Schnappschüssen die Stromversorgung verlieren, verlieren Sie die Daten zwischen dem letzten Schnappschuss und dem Absturz (muss kein Stromausfall sein ..). Redis tauscht Datensicherheit gegen Leistung aus, wie es die meisten NoSQL-DBs tun.

Die meisten NoSQL-Datenbanken folgen einem Replikationskonzept zwischen mehreren Knoten, um dieses Risiko zu minimieren. Redis wird eher als schneller Cache angesehen als als eine Datenbank, die Datenkonsistenz garantiert. Daher unterscheiden sich die Anwendungsfälle normalerweise von denen realer Datenbanken: Sie können beispielsweise Sitzungen, Leistungsindikatoren oder was auch immer darin speichern, mit unübertroffener Leistung und ohne wirklichen Verlust im Falle eines Absturzes. Die Verarbeitung von Bestellungen / Kaufhistorien usw. wird jedoch als Aufgabe für herkömmliche Datenbanken angesehen.

Manuel Arwed Schmidt
quelle
1
Es ist großartig, wenn Sie das Standard-Persistenzverhalten hinzufügen können. Wie @Leonid Beschastny Antwort.
Yeya
39

Der Redis-Server speichert von Zeit zu Zeit alle seine Daten auf der Festplatte und bietet so ein gewisses Maß an Persistenz.

Es speichert Daten in einem der folgenden Fälle:

  • automatisch von Zeit zu Zeit
  • wenn Sie den Befehl manuell aufrufenBGSAVE
  • wenn redis heruntergefahren wird

Aber Daten in Redis sind nicht wirklich persistent, weil:

  • Ein Absturz des Redis-Prozesses bedeutet, dass alle Änderungen seit dem letzten Speichern verloren gehen
  • BGSAVE Der Vorgang kann nur ausgeführt werden, wenn Sie über genügend freien Arbeitsspeicher verfügen (die Menge des zusätzlichen Arbeitsspeichers entspricht der Größe der Redis-Datenbank).

NB: Die BGSAVE RAM-Anforderung ist ein echtes Problem, da redis so lange weiterarbeitet, bis kein RAM mehr ausgeführt werden kann, aber das Speichern von Daten auf der Festplatte viel früher beendet wird (bei ca. 50% des RAM).

Weitere Informationen finden Sie unter Redis-Persistenz .

Leonid Beschastny
quelle
1
Da diese Antwort geschrieben wurde, führte redis ein alternatives Persistenzmodell namens AOF ein, das eine deutlich höhere Persistenz bietet, jedoch einige andere Nachteile wie eine höhere Festplattenauslastung und einen langsameren Serverstart aufweist.
Leonid Beschastny
15

Es ist eine Frage der Konfiguration. Sie können keine, teilweise oder vollständige Persistenz Ihrer Daten auf Redis haben. Die beste Entscheidung wird von den technischen und geschäftlichen Anforderungen des Projekts abhängen.

Gemäß der Redis-Dokumentation zur Persistenz können Sie Ihre Instanz so einrichten, dass von Zeit zu Zeit oder bei jeder Abfrage Daten auf der Festplatte gespeichert werden. Sie bieten zwei Strategien / Methoden AOF und RDB (lesen Sie die Dokumentation, um Details zu diesem Zeitpunkt zu sehen). Sie können jede für sich oder zusammen verwenden.

Wenn Sie eine "SQL-ähnliche Persistenz" wünschen, haben sie gesagt:

Der allgemeine Hinweis ist, dass Sie beide Persistenzmethoden verwenden sollten, wenn Sie ein Maß an Datensicherheit wünschen, das mit dem vergleichbar ist, was PostgreSQL Ihnen bieten kann.

Adailson De Castro
quelle
7

Die Antwort lautet im Allgemeinen Ja . Eine umfassendere Antwort hängt jedoch davon ab, welche Art von Daten Sie speichern möchten. Im Allgemeinen lautet die vollständigere kurze Antwort:

  • Redis eignet sich nicht am besten für dauerhaften Speicher, da es hauptsächlich auf die Leistung ausgerichtet ist
  • Redis eignet sich besser für die zuverlässige Speicherung / Zwischenspeicherung aktueller Statusdaten im Speicher , insbesondere für die Ermöglichung der Skalierbarkeit, indem eine zentrale Quelle für Daten bereitgestellt wird, die auf mehreren Clients / Servern verwendet werden

Nachdem dies gesagt ist, werden standardmäßig Redis werden Daten bestehen Schnappschüsse in einem periodischen Intervall (scheinbar diese alle 1 Minute, aber ich habe dies nicht überprüft - das durch den Artikel im folgenden beschrieben wird, die ein gutes Basis Intro ist):

http://qnimate.com/redis-permanent-storage/


TL; DR

Aus den offiziellen Dokumenten :

  • Die RDB-Persistenz [Standardeinstellung] führt in bestimmten Intervallen Momentaufnahmen Ihres Datensatzes zu bestimmten Zeitpunkten durch.
  • Die AOF-Persistenz [muss explizit konfiguriert werden] protokolliert jeden vom Server empfangenen Schreibvorgang, der beim Serverstart erneut abgespielt wird, und rekonstruiert das ursprüngliche Dataset.

Redis muss explizit für die AOF-Persistenz konfiguriert werden , falls dies erforderlich ist. Dies führt zu einer Leistungsminderung sowie zu wachsenden Protokollen. Dies kann für eine relativ zuverlässige Persistenz einer begrenzten Datenmenge ausreichen.

Chris Halcrow
quelle
5

Sie können überhaupt keine Persistenz wählen. Bessere Leistung, aber alle Daten verlieren, wenn Redis heruntergefahren wird.

Redis verfügt über zwei Persistenzmechanismen: RDB und AOF.RDB verwenden ein globales Scheduler-Snapshooting und AOF schreibt ein Update in eine Nur-App-Protokolldatei, die MySql ähnelt.

Sie können eine oder beide verwenden. Beim Neustart von Redis werden Daten aus dem Lesen der RDB- oder AOF-Datei erstellt.

Songxin
quelle