Ursache der Lawine:
Das einfache Verständnis der Cache-Lawine ist: aufgrund des Ausfalls des ursprünglichen Caches (oder der Daten werden nicht in den Cache geladen), Während dieser Zeit ist der Cache nicht eingetroffen (der Cache wird normalerweise von Redis bezogen, wie unten gezeigt), und alle Anfragen, die auf den Cache hätten zugreifen sollen, fragen die Datenbank ab, was in schwerwiegenden Fällen zu einer enormen Belastung der Datenbank-CPU und des Speichers führt , kann es zu Datenbankausfällen und Systemzusammenbrüchen kommen.
Die grundlegende Lösung lautet wie folgt:
Erstens erwägen die meisten Systemdesigner die Verwendung von Sperren oder Warteschlangen, um sicherzustellen, dass nicht eine große Anzahl von Threads gleichzeitig in die Datenbank liest und schreibt Vermeiden Sie übermäßigen Druck auf die Datenbank, wenn der Cache ausfällt. Dies kann zwar den Druck auf die Datenbank bis zu einem gewissen Grad verringern, verringert jedoch auch den Durchsatz des Systems.
Zweitens: Analysieren Sie das Benutzerverhalten und versuchen Sie, die Cache-Ungültigmachungszeit gleichmäßig zu verteilen.
Drittens: Wenn ein bestimmter Cache-Server ausgefallen ist, können Sie Primär- und Backup-Server in Betracht ziehen, z. B. Redis-Primär- und Backup-Server. Doppeltes Caching erfordert jedoch Aktualisierungstransaktionen, und die Aktualisierung liest möglicherweise fehlerhafte Daten, was behoben werden muss.
Lösung für den Redis-Lawineneffekt:
1. Für die eigenständige Version können lokale Sperren verwendet werden
🎜> 3. Level eins und Level zwei Cache Redis+Ehchache
Gleichmäßig verteilte Ablaufzeit des Redis-Schlüssels
Erklärung:
1. Wenn es plötzlich eine große Anzahl gibt Anzahl der Anfragen an die Datenbank Bei der Nutzung des Servers werden Anfragebeschränkungen implementiert. Mit dem oben genannten Mechanismus wird garantiert, dass nur ein Thread (Anfrage) arbeitet. Andernfalls in die Warteschlange stellen und warten (verteilte Clustersperre, eigenständige lokale Sperre). Reduzieren Sie den Serverdurchsatz und die geringe Effizienz.
Zum Sperren hinzufügen!
Stellen Sie sicher, dass nur ein Thread eintreten kann. Tatsächlich kann nur eine Anfrage den Abfragevorgang ausführen
Sie können hier auch die aktuelle Begrenzungsstrategie verwenden ~
2. Verwenden Sie Nachrichten-Middleware, um
Diese Lösung ist die zuverlässigste Lösung!
Nachrichten-Middleware kann hohe Parallelität lösen! ! !
Wenn in Redis beim Zugriff auf eine große Anzahl von Anforderungen kein Wert vorhanden ist, werden die Abfrageergebnisse in der Nachrichten-Middleware gespeichert (unter Verwendung der asynchronen Synchronisierungsfunktion von MQ)
3. Erstellen Sie einen Cache der zweiten Ebene. A1 ist der Original-Cache und A2 ist der Kopier-Cache. Wenn A1 ausfällt, können Sie auf die Cache-Ablaufzeit von A1 zugreifen auf „langfristig“ einstellen (dieser Punkt ist eine Ergänzung)
4. Stellen Sie unterschiedliche Ablaufzeiten für verschiedene Schlüssel ein, um die Cache-Ungültigmachungszeit so gleichmäßig wie möglich zu gestalten.
Weitere Informationen zu Redis finden Sie in der Spalte
Tutorial zur Redis-NutzungDas obige ist der detaillierte Inhalt vonSo lösen Sie die durch Redis verursachte Lawine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!