Heim >Datenbank >Redis >Lassen Sie uns über Cache-Penetration, Cache-Lawine, Cache-Aufschlüsselung und Cache-Konsistenz in Redis sprechen

Lassen Sie uns über Cache-Penetration, Cache-Lawine, Cache-Aufschlüsselung und Cache-Konsistenz in Redis sprechen

青灯夜游
青灯夜游nach vorne
2021-11-24 19:42:042096Durchsuche

Dieser Artikel gibt Ihnen einen kurzen Überblick über Cache-Penetration, Cache-Lawine, Cache-Aufschlüsselung und Cache-Konsistenz in Redis und stellt die Lösungen für Cache-Penetration und Cache-Lawine vor. Ich hoffe, dass er für alle hilfreich ist!

Lassen Sie uns über Cache-Penetration, Cache-Lawine, Cache-Aufschlüsselung und Cache-Konsistenz in Redis sprechen

Cache-Lawine

Der Cache fällt gleichzeitig in einem großen Bereich aus, und nachfolgende Anforderungen fallen auf die Datenbank, was dazu führt, dass die Datenbank einer großen Anzahl von Anforderungen in kurzer Zeit nicht standhalten kann Einbruch

Auf der E-Commerce-Homepage beträgt beispielsweise die Schlüsselablaufzeit aller Homepages alle 12 Stunden und wird um 12 Uhr mittags aktualisiert, wenn um 0:00 Uhr ein Flash-Sale-Event stattfindet und eine große Anzahl von Benutzern hereinströmt , aber alle Schlüssel im Cache sind zu diesem Zeitpunkt ungültig. Wenn die Datenbank dies nicht verarbeiten kann, wird sie direkt blockiert. Wenn Redis ausfällt, wird eine große Anzahl von Anforderungen an MySQL gesendet. wodurch es aufhängt. [Verwandte Empfehlungen: Redis-Video-Tutorial]

Lösung

  • In diesem Fall sollten Sie der Ablaufzeit jedes Schlüssels einen zufälligen Wert hinzufügen, um eine große Anzahl von Schlüsselfehlern gleichzeitig zu vermeiden ist eine Redis-Cluster-Bereitstellung. Hotspot-Daten können an verschiedene Bibliotheken verteilt werden.

  • Vorher: Versuchen Sie, die hohe Verfügbarkeit des Redis-Clusters sicherzustellen, Maschinenausfallzeiten so schnell wie möglich auszugleichen und eine geeignete Strategie zur Speicherbeseitigung zu wählen

  • In Bearbeitung: lokaler Ehcache-Cache + Hystrix-Strombegrenzung und Downgrade Um einen MySQL-Absturz zu vermeiden

  • Danach: Die vom Redis-Persistenzmechanismus gespeicherten Daten werden so schnell wie möglich im Cache wiederhergestellt.

Cache-Penetration

Eine große Anzahl angeforderter Schlüssel ist nicht im Cache vorhanden. Beispielsweise erstellt ein Hacker einen Schlüssel, der nicht im Cache vorhanden ist, und initiiert eine große Anzahl von Anfragen, was zu einer großen Anzahl von Anfragen führt in die Datenbank fallen.

Lösung

  • Zunächst sollten Sie eine grundlegende Überprüfung der Eingabeparameter durchführen und illegale Parameter direkt abfangen. Fragen Sie beispielsweise ab, ob die Datenbank-ID nicht kleiner als 0 sein darf, überprüfen Sie das E-Mail-Format usw.

  • Wenn beides Der Cache und die Datenbank sind Wenn die Daten eines bestimmten Schlüssels nicht gefunden werden können, wird der Schlüssel in Redis geschrieben, der Wert ist null und die Ablaufzeit wird festgelegt, um zu verhindern, dass die nächste Anforderung auf die Datenbank fällt.

  • Durch den Bloom-Filter kann der Bloom-Filter sehr bequem feststellen, ob bestimmte Daten in massiven Daten vorhanden sind. Alle möglichen angeforderten Werte können im Bloom-Filter gespeichert werden, und wenn die Anfrage eintrifft, wird zunächst festgestellt, ob die Anfrage gesendet wurde vom Benutzer im Bloom-Filter vorhanden ist, und ihn direkt abfangen, wenn er nicht vorhanden ist.

Cache-Aufschlüsselung

Cache-Aufschlüsselung bezieht sich auf einen Schlüssel-Hotspot, der ständig große Parallelität aufweist. Wenn der Schlüssel fehlschlägt, durchbricht die kontinuierliche große Parallelität den Cache und fordert ihn direkt an Datenbank

Cache-Konsistenz

Wenn eine starke Konsistenz erforderlich ist, kann der Cache nicht verwendet werden, da keine starke Konsistenz garantiert werden kann, sondern nur eine eventuelle Konsistenz.

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

Wenn die Datenbankaktualisierung fehlschlägt, sind in der Datenbank noch alte Daten vorhanden, Redis ist leer und die Daten sind nicht inkonsistent. Wenn sie leer sind, werden sie gelöscht Zur Abfrage in die Datenbank übertragen und dann im Cache aktualisieren.

  • Treten Sie der Warteschlange bei und führen Sie Serialisierungsvorgänge aus.

Löschen Sie zuerst den Cache und aktualisieren Sie dann die Datenbank. In Szenarien mit hoher Parallelität können auch Probleme auftreten, z. B. wenn der Cache gelöscht wird und die Datenbank zu diesem Zeitpunkt nicht aktualisiert wird in und findet Wenn Redis leer ist, wird die Datenbank gelesen und dann auf Redis aktualisiert. Wenn zu diesem Zeitpunkt der zwischengespeicherte Thread gelöscht und dann die Datenbank aktualisiert wird, sind die Datenbank- und Redis-Daten zu diesem Zeitpunkt inkonsistent. Der Datenaktualisierungsvorgang kann in die Warteschlange gestellt und serialisiert werden. Der Vorgang wird nicht ausgeführt, wird jedoch im Allgemeinen nicht empfohlen, da er die Effizienz verringert.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Einführung in die Programmierung! !

Das obige ist der detaillierte Inhalt vonLassen Sie uns über Cache-Penetration, Cache-Lawine, Cache-Aufschlüsselung und Cache-Konsistenz in Redis sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen