Heim >Datenbank >Redis >Wie stellt Redis die Datenkonsistenz sicher?

Wie stellt Redis die Datenkonsistenz sicher?

(*-*)浩
(*-*)浩Original
2019-11-20 14:09:299843Durchsuche

Im Allgemeinen kann es bei der Verwendung von Cache, egal ob Redis oder Memcache, zu Problemen mit der Konsistenz von Datenbank-Cache und Daten kommen. Hier nehmen wir Redis als Beispiel.

Wie stellt Redis die Datenkonsistenz sicher?

Wie können wir die Konsistenz zwischen Redis und der Datenbank sicherstellen?

So einfach:                                                                                                                                                                                                                 .

Lesen Sie beim Lesen zuerst den Cache. Wenn nicht, lesen Sie die Datenbank, legen Sie die Daten in den Cache und geben Sie die Antwort zurück.

Auf den ersten Blick scheint das Konsistenzproblem sehr gut gelöst zu sein. Aber wenn Sie genau darüber nachdenken, werden Sie feststellen, dass es immer noch ein Problem gibt: Was passiert, wenn Sie zuerst die Datenbank aktualisieren und den Cache nicht löschen? Dann gibt es neue Daten in der Datenbank und alte Daten im Cache, und die Daten sind inkonsistent.

Verbesserungsplan:

Löschen Sie zuerst den Cache und aktualisieren Sie dann die Datenbank. Denn selbst wenn die Datenbankaktualisierung später fehlschlägt und der Cache leer ist, werden sie beim Lesen erneut aus der Datenbank abgerufen. Obwohl es sich um alte Daten handelt, sind die Daten konsistent.

Die Lösung lautet also:

Löschen Sie beim Aktualisieren zuerst den Cache und aktualisieren Sie dann die Datenbank.

Lesen Sie beim Lesen zuerst den Cache. Wenn nicht, lesen Sie die Datenbank, legen Sie die Daten in den Cache und geben Sie die Antwort zurück.

Ist das Problem zu diesem Zeitpunkt vollständig gelöst?

Eigentlich nicht. In einem Szenario mit hoher Parallelität tritt die folgende Situation auf: Die Daten haben sich geändert, der Cache wird zuerst gelöscht und dann wird die Datenbank geändert. Bevor es Zeit zum Ändern gab, ging eine Anfrage ein, ich ging zum Lesen des Caches und stellte fest, dass der Cache leer war. Ich ging zum Lesen der Datenbank, las die alten Daten vor der Änderung und legte die alten Daten in den Cache .

Anschließend schloss das Datenänderungsprogramm die Änderung der Datenbank ab. Dann ist es vorbei, zu diesem Zeitpunkt tritt eine Dateninkonsistenz auf...

Lösung:

Wie stellt Redis die Datenkonsistenz sicher?In diesem Fall können Sie zunächst den Vorgang „DB ändern“ ändern wird in eine JVM-Warteschlange gestellt. Nachdem nachfolgende Leseanforderungen eingegangen sind, wird der Vorgang „Cache aktualisieren“ ebenfalls in dieselbe JVM-Warteschlange gestellt. Jede Warteschlange führt für einen Job-Thread verwandte Vorgänge der Reihe nach aus. Damit kann garantiert werden, dass der „Update-Cache“ nach der Änderung der Datenbank vorhanden sein muss, um die Datenkonsistenz sicherzustellen, wie in der folgenden Abbildung dargestellt:

Das obige ist der detaillierte Inhalt vonWie stellt Redis die Datenkonsistenz sicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn