Lösungen zur Cache-Penetration: 1. Leere Daten zwischenspeichern; 2. Bloom-Filter verwenden; 2. Lösung für die Cache-Lawine: 1. Stellen Sie den entsprechenden Hotspot-Schlüssel so ein, dass er nie abläuft. 2. Verschieben Sie die Ablaufzeit, verwenden Sie eine Zufallsgenerierung für die Ablaufzeit und stellen Sie die Ablaufzeit der Hotspot-Daten länger ein 4. Beschaffung von Redis von Drittanbietern.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, Redis Version 6, DELL G3-Computer.
1. Cache-Penetration
Wenn der vom Benutzer abgefragte Schlüssel in Redis nicht vorhanden ist und die entsprechende ID nicht in der Datenbank vorhanden ist, wird er von einem ausgeführt Wenn ein illegaler Benutzer zu diesem Zeitpunkt angreift, wird eine große Anzahl von Anforderungen direkt auf die Datenbank übertragen, was zu Ausfallzeiten führt und sich somit auf das gesamte System auswirkt. Dieses Phänomen wird als Cache-Penetration bezeichnet.
Lösung 1: Leere Daten wie leere Zeichenfolgen, leere Objekte, leere Arrays oder Listen zwischenspeichern. Der Code lautet wie folgt
if (list != null && list.size() > 0) { redisOperator.set("subCat:" + rootCatId, JsonUtils.objectToJson(list)); } else { redisOperator.set("subCat:" + rootCatId, JsonUtils.objectToJson(list), 5*60); }
Lösung 2: Bloom-Filter
Bloom-Filter Gerät:
Bestimmt, ob Ein Element befindet sich in einem Array, wie unten gezeigt. Es verwendet eine Binärdatei zum Speichern und belegt einen relativ kleinen Speicher. 0 steht für Nichtexistenz, 1 für Existenz und die Abfrageeffizienz ist sehr schnell Bei einem Algorithmus wird der entsprechende Wert an einer bestimmten Position im Bloom-Filtersatz gespeichert. Wenn ein nicht vorhandener Schlüsselwert übergeben wird, wird er mit dem Satz abgeglichen Tritt nicht auf, wird eine Null zurückgegeben
Nachteile:
1. Wenn ein Schlüssel nicht im Bloom-Array vorhanden ist, wird unter bestimmten Umständen davon ausgegangen, dass der Schlüssel vorhanden ist . Je länger das Array, desto niedriger die Falsch-Positiv-Rate und je kürzer das Array, desto höher die Falsch-Positiv-Rate
2 Wenn wir einen Schlüsselwert löschen möchten, löschen wir den Inhalt in unserer Datenbank und redis Das Bloom-Array kann nicht gelöscht werden, da sich an einer bestimmten Position im Array ein Schlüsselpaar befindet. Wenn wir löschen möchten, ändern wir 1 in 0, aber alle Schlüsselwerte werden gelöscht
3. Die Komplexität des Codes wird ebenfalls zunehmen, da wir eine zusätzliche Sammlung verwalten müssen. Wenn wir einen Redis-Cluster verwenden, muss der Bloom-Filter in Verbindung mit Redis verwendet werden. 2. Redis-Cache-Lawine Cache-Lawine: Die Daten im Cache sind groß. Batch-Fehler, und dann erfordert diese Verwendung eine große Anzahl eingehender Anforderungen. Da jedoch alle Schlüssel in Redis fehlgeschlagen sind, werden alle Anforderungen an die Datenbank gesendet, was zu Ausfallzeiten führt
Lösung
1. Stellen Sie den entsprechenden Hotspot-Schlüssel niemals ein. Ablaufzeit 2. Die Ablaufzeit ist gestaffelt, die Ablaufzeit wird zufällig generiert und die Ablaufzeit von Hot-Daten ist länger und die Ablaufzeit von Nicht-Hot-Daten ist länger Daten können kürzer eingestellt werden 3. Kombinieren mehrerer Caches, zum Beispiel: Wenn eine Anfrage eingeht, können Sie jetzt Redis anfordern. Wenn Redis nicht vorhanden ist, fordern Sie erneut Datenbank an. 4. Kaufen Redis von Drittanbietern (Redis auf Alibaba Cloud oder Tencent Cloud)
[Verwandte Empfehlungen:Redis-Video-Tutorial]
Das obige ist der detaillierte Inhalt vonSo lösen Sie Redis-Cache-Lawine und -Penetration. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!