Jeder weiß, dass einer der Engpässe bei Computern die E/A ist. Um das Problem der Nichtübereinstimmung zwischen Speicher und Festplattengeschwindigkeit zu lösen, wird ein Cache generiert, um einige heiße Daten im Speicher abzulegen und jederzeit darauf zuzugreifen. Dies reduziert die Verbindungszeit der Datenbankanforderung, um ein Aufhängen der Datenbank zu vermeiden. Es ist zu beachten, dass unabhängig davon, ob es sich um einen Zusammenbruch oder um das später besprochene Eindringen und die Lawine handelt, alles unter der Voraussetzung einer hohen Parallelität erfolgt, beispielsweise wenn ein bestimmter Hotkey im Cache fehlschlägt.
Es gibt zwei Hauptgründe:
1. Schlüssel wurde durch Seitenaustausch entfernt.
Aus dem ersten Grund hat der Schlüssel in Redis eine Ablaufzeit. Wenn der Schlüssel zu einem bestimmten Zeitpunkt abläuft (wenn das Einkaufszentrum ein Ereignis durchführt, beginnt er um 0:00 Uhr), dann werden alle Abfrageanforderungen für ein bestimmtes Produkt ausgeführt nach 0:00 Uhr wird an die Datenbank weitergegeben, was zum Absturz der Datenbank führt.
3. Verarbeitungsideen für den Umgang mit Ausfällen
Die normale Verarbeitungsanforderung ist wie in der Abbildung dargestellt:
Da der Schlüsselablauf unvermeidlich ist, wenn hoher Datenverkehr zu Redis kommt, entsprechend den Single-Threaded-Eigenschaften von Redis Es kann davon ausgegangen werden, dass sich die Aufgabe in der Warteschlange befindet. Wenn die Anforderung Redis erreicht und festgestellt wird, dass der Schlüssel abgelaufen ist, wird ein Vorgang ausgeführt: Setzen der Sperre.Dieser Vorgang läuft ungefähr wie folgt ab:
Die Anfrage kommt bei Redis an und es wird festgestellt, dass der Redis-Schlüssel abgelaufen ist. Überprüfen Sie, ob eine Sperre vorhanden ist. Gehen Sie zurück zur Rückseite Warteschlange und Warteschlange. Beachten Sie, dass dies setnx() und nicht set() sein sollte, da möglicherweise andere Threads die Sperre festgelegt haben an die Datenbank, um die Daten abzurufen, und geben Sie die Sperre frei, nachdem die Anforderung zurückgegeben wurde.
4. Penetration
Zusätzlich zu Bloom-Filtern können Sie einige Parameterprüfungen hinzufügen. Wenn Sie beispielsweise Parameter wie id = -10 anfordern, wird Redis zwangsläufig umgangen. Sie können die Benutzerauthentifizierungstests und andere Vorgänge überprüfen.
Wenn es zeitbezogen ist, zum Beispiel ändert die gerade erwähnte Bank einen bestimmten Koeffizienten an einem bestimmten Tag, dann muss eine starke Abhängigkeitsaufschlüsselungslösung verwendet werden. Die Strategie besteht darin, zuerst alle Schlüssel mit dem vergangenen Thread zu aktualisieren.
Während der Aktualisierung des Hotspot-Schlüssels im Hintergrund verzögert die Business-Schicht die eingehende Anfrage, z. B. indem sie einige Millisekunden oder Sekunden kurz in den Ruhezustand versetzt Stellen Sie die folgenden Update-Hotspot-Schlüssel zur Verfügung, um den Druck zu verteilen.
Das obige ist der detaillierte Inhalt vonWas verursacht die Redis-Ausfalllawine und wie kann man sie lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!