Heim  >  Artikel  >  Datenbank  >  Worauf sollten Sie bei der Verwendung von Redis achten?

Worauf sollten Sie bei der Verwendung von Redis achten?

(*-*)浩
(*-*)浩Original
2019-06-05 17:52:073549Durchsuche

Die wichtigsten Probleme, auf die Sie bei der Verwendung von Redis achten sollten, sind folgende:

Worauf sollten Sie bei der Verwendung von Redis achten?

Redis und Datenbank-Double-Write-Konsistenzprobleme (empfohlenes Lernen: Redis-Video-Tutorial )

Analyse: Konsistenzproblem ist ein häufiges verteiltes Problem und kann weiter in endgültige Konsistenz und starke Konsistenz unterteilt werden. Wenn Datenbank und Cache doppelt geschrieben werden, kommt es zwangsläufig zu Inkonsistenzen. Um diese Frage zu beantworten, müssen Sie zunächst eine Prämisse verstehen. Das heißt, wenn strenge Konsistenzanforderungen für die Daten bestehen, können diese nicht zwischengespeichert werden. Alles, was wir tun, kann nur letztendliche Konsistenz garantieren. Darüber hinaus kann die von uns gefundene Lösung grundsätzlich nur die Wahrscheinlichkeit einer Inkonsistenz verringern, sie jedoch nicht vollständig vermeiden. Daher können Daten mit hohen Konsistenzanforderungen nicht zwischengespeichert werden. ----------

Analyse: Das Konsistenzproblem ist ein häufiges verteiltes Problem und kann weiter in endgültige Konsistenz und starke Konsistenz unterteilt werden. Wenn Datenbank und Cache doppelt geschrieben werden, kommt es zwangsläufig zu Inkonsistenzen. Um diese Frage zu beantworten, müssen Sie zunächst eine Prämisse verstehen. Das heißt, wenn strenge Konsistenzanforderungen für die Daten bestehen, können diese nicht zwischengespeichert werden. Alles, was wir tun, kann nur letztendliche Konsistenz garantieren. Darüber hinaus kann die von uns gefundene Lösung grundsätzlich nur die Wahrscheinlichkeit einer Inkonsistenz verringern, sie jedoch nicht vollständig vermeiden. Daher können Daten mit hohen Konsistenzanforderungen nicht zwischengespeichert werden.

Übernehmen Sie zunächst die richtige Aktualisierungsstrategie, aktualisieren Sie zuerst die Datenbank und löschen Sie dann den Cache. Zweitens reicht es aus, eine Kompensationsmaßnahme bereitzustellen, z. B. die Verwendung einer Nachrichtenwarteschlange, da möglicherweise ein Fehler beim Löschen des Caches auftritt.

Wie man mit Cache-Penetrations- und Cache-Avalanche-Problemen umgeht

Analyse: Um ehrlich zu sein, sind diese beiden Probleme für kleine und mittlere traditionelle Softwareunternehmen sehr schwierig zu lösen Begegnung. Wenn es große gleichzeitige Projekte gibt, wird der Datenverkehr etwa Millionen betragen. Diese beiden Themen müssen eingehend geprüft werden.

Antwort: Wie unten gezeigt

Cache-Penetration, das heißt, Hacker fordern absichtlich Daten an, die nicht im Cache vorhanden sind, wodurch alle Anfragen gesendet werden auf die Datenbank, was zu einer abnormalen Datenbankverbindung führt.

Lösung:

(1) Verwenden Sie die Mutex-Sperre, nachdem Sie die Sperre erhalten haben. Wenn die Sperre nicht erhalten wird, schlafen Sie eine Zeit lang und versuchen Sie es erneut

(2) Verwenden Sie eine asynchrone Aktualisierungsstrategie und kehren Sie direkt zurück, unabhängig davon, ob der Schlüssel einen Wert hat. Im Wert wird eine Cache-Ablaufzeit verwaltet. Wenn der Cache abläuft, wird asynchron ein Thread gestartet, um die Datenbank zu lesen und den Cache zu aktualisieren. Der Cache-Vorwärmvorgang (Laden des Caches vor dem Starten des Projekts) ist erforderlich.

(3) Stellen Sie einen Abfangmechanismus bereit, der schnell feststellen kann, ob die Anfrage gültig ist, indem Sie beispielsweise Bloom-Filter verwenden, um intern eine Reihe legaler und gültiger Schlüssel zu verwalten. Stellen Sie schnell fest, ob der in der Anfrage enthaltene Schlüssel legal und gültig ist. Wenn es illegal ist, kehren Sie direkt zurück.

Cache-Lawine, das heißt, der Cache fällt gleichzeitig in einem großen Bereich aus. Zu diesem Zeitpunkt kommt es zu einer weiteren Welle von Anfragen, und infolgedessen werden alle Anfragen an die Datenbank gesendet , was zu einer abnormalen Datenbankverbindung führt.

Lösung:

(1) Fügen Sie einen zufälligen Wert zur Cache-Ablaufzeit hinzu, um kollektive Fehler zu vermeiden.

(2) Verwenden Sie eine Mutex-Sperre, aber der Durchsatz dieser Lösung sinkt erheblich.

(3) Doppelte Pufferung. Wir haben zwei Caches, Cache A und Cache B. Die Ablaufzeit von Cache A beträgt 20 Minuten, für Cache B gibt es keine Ablaufzeit. Führen Sie den Cache-Aufwärmvorgang selbst durch. Unterteilen Sie dann die folgenden Punkte:

I liest die Datenbank aus Cache A und kehrt direkt zurück, wenn welche vorhanden sind

II A hat keine Daten, liest Daten direkt aus B, kehrt direkt zurück und asynchron einen Update-Thread starten.

III Der Update-Thread aktualisiert Cache A und Cache B gleichzeitig.

So lösen Sie das Problem des gleichzeitigen Schlüsselwettbewerbs in Redis

Analyse: Dieses Problem besteht ungefähr darin, dass mehrere Subsysteme gleichzeitig einen Schlüssel festlegen. Worauf sollten wir zu diesem Zeitpunkt achten? Haben Sie jemals darüber nachgedacht? Es muss erklärt werden, dass der Blogger im Voraus Baidu durchsucht und festgestellt hat, dass die Antworten grundsätzlich die Verwendung des Redis-Transaktionsmechanismus empfehlen. Der Blogger rät von der Verwendung des Redis-Transaktionsmechanismus ab. Da unsere Produktionsumgebung im Grunde eine Redis-Cluster-Umgebung ist, werden Daten-Sharding-Vorgänge durchgeführt. Wenn an einer Transaktion mehrere Schlüsselvorgänge beteiligt sind, werden diese mehreren Schlüssel nicht unbedingt auf demselben Redis-Server gespeichert. Daher ist der Transaktionsmechanismus von Redis sehr nutzlos.

Antwort: Wie unten gezeigt

(1) Wenn Sie diesen Schlüssel betätigen, ist die Reihenfolge nicht erforderlich

In diesem Fall bereiten Sie ein verteiltes Schloss vor und jeder wird das greifen lock: Führen Sie einfach den Set-Vorgang aus, nachdem Sie das Schloss ergriffen haben, was relativ einfach ist.

(2) Wenn Sie diese Taste betätigen, lautet die erforderliche Reihenfolge

Angenommen, es gibt einen Schlüssel1, System A muss Schlüssel1 auf WertA setzen, System B muss Schlüssel1 auf WertB setzen und System C muss key1 auf valueB setzen.

erwartet, dass sich der Wert von key1 in der Reihenfolge valueA–>valueB–>valueC ändert. Zu diesem Zeitpunkt müssen wir beim Schreiben von Daten in die Datenbank einen Zeitstempel speichern. Nehmen Sie an, dass der Zeitstempel wie folgt lautet:

系统A key 1 {valueA  3:00}
系统B key 1 {valueB  3:05}
系统C key 1 {valueC  3:10}

Nehmen Sie dann an, dass System B zuerst die Sperre ergreift und Schlüssel1 auf {WertB 3:05} setzt. Als nächstes greift System A nach der Sperre und stellt fest, dass der Zeitstempel seines eigenen Werts A früher ist als der Zeitstempel im Cache, sodass es den Set-Vorgang nicht ausführt. Und so weiter.

Weitere technische Artikel zum Thema Redis finden Sie in der Spalte Einführungs-Tutorial zur Verwendung der Redis-Datenbank.

Das obige ist der detaillierte Inhalt vonWorauf sollten Sie bei der Verwendung von Redis achten?. 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