1. Das Konzept der Cache-Penetration ist sehr einfach. Der Benutzer möchte Daten abfragen und stellt fest, dass die Redis-Speicherdatenbank diese nicht hat hit, also fragt es die Datenbank der Persistenzschicht ab. Es wurde festgestellt, dass keine vorhanden waren, sodass diese Abfrage fehlschlug. Wenn viele Benutzer vorhanden sind, wird der Cache nicht erreicht, sodass alle Benutzer die Datenbank der Persistenzschicht anfordern. Wenn eine Cache-Penetration auftritt, wird die Datenbank der Persistenzschicht stark belastet.
Sie müssen auf den Unterschied zwischen Cache-Aufschlüsselung und Cache-Aufschlüsselung achten. Der Cache-Ausfall bezieht sich auf einen Schlüssel, der ständig mit großer Parallelität verbunden ist, und konzentriert sich auf den Zugriff auf diesen Punkt Die kontinuierliche große Parallelität durchbricht den Cache und fordert direkt die Datenbank an, was dem Schneiden eines Lochs in eine Barriere gleicht.
Es gibt tatsächlich viele Lösungen, um das Eindringen in den Cache zu verhindern. Einige werden im Folgenden vorgestellt.
2. Lösung
(1) Bloom-Filter
Laut Statistik erreicht die Gesamtzahl der Junk-Websites und normalen Websites auf der Welt eine Art Filter, der auf A angewendet werden kann Datenstruktur dieser Größe. Durch die Verwendung von Bloom-Filtern entfällt die Notwendigkeit, dass die Internetpolizei Spam-Websites in der Datenbank einzeln vergleicht. Angenommen, wir speichern 100 Millionen Spam-Website-Adressen.
Sie können zunächst 100 Millionen Binärbits haben, und dann verwendet die Netzwerkpolizei acht verschiedene Zufallszahlengeneratoren (F1, F2, …, F8), um acht Informationsfingerabdrücke (f1, f2, …, f8) zu generieren. Als nächstes wird ein Zufallszahlengenerator G verwendet, um diese acht Informationsfingerabdrücke auf acht natürliche Zahlen g1, g2, …, g8 von 1 bis 100 Millionen abzubilden. Setzen Sie abschließend alle Binärwerte dieser acht Positionen auf eins. Der Ablauf läuft wie folgt ab: Eines Tages fand die Internetpolizei eine verdächtige Website und wollte feststellen, ob es sich um eine XX-Website handelte. Zunächst wurde die verdächtige Website auf 8 Punkte auf einem 100-Millionen-Bit-Array gehasht . Wenn es einen Punkt gibt, der nicht 1 ist, können Sie sicher sein, dass das Element nicht in der Menge enthalten ist. Wie löst dieser Bloom-Filter die Cache-Penetration in Redis? Es ist ganz einfach: Zunächst werden alle möglichen Abfrageparameter in Hash-Form gespeichert. Wenn der Benutzer eine Abfrage durchführen möchte, stellt er fest, dass sie nicht in der Sammlung enthalten sind, und verwirft sie dann direkt, ohne die Persistenzebene abzufragen . Dieses Formular ist sehr einfach.2. Leere Objekte zwischenspeichern
Wenn die Speicherschicht ausfällt, wird auch das zurückgegebene leere Objekt zwischengespeichert und eine Ablaufzeit festgelegt. Wenn Sie später auf die Daten zugreifen, werden diese aus dem Cache abgerufen ist geschützt Backend-Datenquelle
Bei dieser Methode gibt es jedoch zwei Probleme:
(1) Redis mit hoher Verfügbarkeit Andere Dinge können weiterhin funktionieren, was eigentlich der Cluster ist, der erstellt wurde.
(2) Strombegrenzungs-Downgrade
Die Idee dieser Lösung besteht darin, Sperr- oder Warteschlangenmethoden zu verwenden, um die Anzahl der Threads zu steuern, die die Datenbank lesen und in den Cache schreiben, nachdem der Cache abgelaufen ist. Beispielsweise darf nur ein Thread Daten abfragen und den Cache schreiben, um einen bestimmten Schlüssel zu bedienen, und die verbleibenden Threads müssen warten.
(3) Datenaufwärmphase
Die Bedeutung der Datenaufwärmphase besteht darin, dass ich vor der formellen Bereitstellung zunächst auf die möglichen Daten im Voraus zugreife, sodass einige Daten, auf die möglicherweise in großen Mengen zugegriffen wird, geladen werden der Cache. Lösen Sie das Laden des Caches verschiedener Schlüssel manuell aus und legen Sie unterschiedliche Ablaufzeiten fest, um die Cache-Ungültigmachungszeit auszugleichen und zu verhindern, dass eine große Anzahl von Zugriffen gleichzeitig erfolgt.
Das obige ist der detaillierte Inhalt vonWas ist das Konzept der Redis-Cache-Penetration und Cache-Lawine?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!