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?
122
Antworten:
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.
quelle
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:
BGSAVE
Aber Daten in Redis sind nicht wirklich persistent, weil:
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 .
quelle
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:
quelle
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:
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 :
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.
quelle
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.
quelle