


Dieser Artikel bringt Ihnen relevantes Wissen über Redis, das hauptsächlich Probleme im Zusammenhang mit Cache-Konsistenz, Cache-Penetration, Cache-Aufschlüsselung, Cache-Lawine und Schreibsynchronisation zwischengespeicherter Daten und DB-Konsistenz behandelt wird für alle hilfreich sein.
Verwandte Empfehlungen: „Analyse von Hotkey-Speicherproblemen in Redis und Diskussion über Lösungen für Cache-Ausnahmen“
(1) Cache-Invalidierungskonsistenzproblem
Allgemeine Cache-Nutzung ist: Lesen Sie die Wenn der Cache nicht vorhanden ist, lesen Sie ihn zuerst aus der Datenbank und schreiben Sie das Ergebnis in den Cache. Wenn die Daten das nächste Mal gelesen werden, können die Daten direkt aus dem Cache abgerufen werden. [Verwandte Empfehlung: Redis-Video-Tutorial]
Bei der Datenänderung werden die zwischengespeicherten Daten direkt ungültig gemacht und dann der DB-Inhalt geändert, um eine erfolgreiche DB-Änderung zu vermeiden. Die zwischengespeicherten Daten werden jedoch aufgrund von Netzwerk- oder anderen Problemen nicht bereinigt, was dazu führt schmutzige Daten. Dies kann jedoch immer noch nicht verhindern, dass schmutzige Daten generiert werden. In einem gleichzeitigen Szenario: Gehen Sie davon aus, dass das Unternehmen eine große Anzahl von Lese- und Änderungsanforderungen für die Daten Key:Hello Value:World hat. Thread A liest „Key:Hello“ von OCS, ruft das Ergebnis „Not Found“ ab, beginnt mit der Datenanforderung von der Datenbank und ruft als Nächstes die Daten „Key:Hello Value:World“ ab. Anschließend bereitet er das Schreiben dieser Daten in OCS vor, jedoch vor dem Schreiben in OCS (Netzwerk). , Das Warten auf die CPU kann dazu führen, dass sich die Verarbeitungsgeschwindigkeit von Thread A verlangsamt.) Ein anderer Thread B fordert eine Änderung der Daten an. Schlüssel:Hallo Wert:OCS und führt zuerst die Invalidierungs-Cache-Aktion aus (da Thread B nicht weiß, ob diese Daten vorhanden sind). , sodass der Invalidierungsvorgang direkt ausgeführt wird. OCS hat die ungültige Anfrage erfolgreich verarbeitet. Kehren Sie zu Thread A zurück, um mit dem Schreiben von OCS fortzufahren und Key:Hello Value:World in den Cache zu schreiben. Thread B hat auch den DB-Dateninhalt erfolgreich in Key:Hello Value:OCS geändert. Um dieses Problem zu lösen, hat OCS das Memcached-Protokoll erweitert (die öffentliche Cloud wird es bald unterstützen) und die Schnittstelle deleteAndIncVersion hinzugefügt. Diese Schnittstelle löscht die Daten nicht wirklich, sondern markiert die Daten, um anzuzeigen, dass sie abgelaufen sind, und erhöht die Datenversionsnummer, wenn die Daten nicht vorhanden sind, wird NULL geschrieben und auch eine zufällige Datenversionsnummer generiert. OCS-Schreiben unterstützt den atomaren Vergleich von Versionsnummern: Unter der Annahme, dass die eingehende Versionsnummer mit der von OCS gespeicherten Datenversionsnummer übereinstimmt oder die Originaldaten nicht vorhanden sind, ist das Schreiben zulässig, andernfalls wird die Änderung abgelehnt.
Zurück zur aktuellen Szene: Thread A liest Key:Hello von OCS, ruft das Ergebnis „Not Found“ ab, beginnt mit der Anforderung von Daten von DB und ruft die Daten Key:Hello Value:World ab. Die Versionsnummerninformationen sind standardmäßig 1. Bevor A in OCS schreibt, initiiert ein anderer B-Thread eine Aktion zum Ändern der Daten. Key:Hello Value:OCS führt zunächst die Lösch-Cache-Aktion erfolgreich aus und generiert eine zufällige Version Zahl von 12345 (Konvention größer als 1000). Kehren Sie zu Thread A zurück und schreiben Sie weiter an OCS und fordern Sie das Schreiben von Key:Hello Value:World an. Zu diesem Zeitpunkt stellt das Cache-System fest, dass die eingehenden Versionsnummerninformationen nicht übereinstimmen (1! = 12345), der Schreibvorgang schlägt fehl Aufgabe von Thread A endet. ;Thread B hat auch den DB-Dateninhalt erfolgreich in Key:Hello Value:OCS geändert.
Zu diesem Zeitpunkt sind die Daten in OCS Key:Hello Value:NULL Version:12345; die Daten in DB sind Key:Hello Value:OCS. Bei nachfolgenden Leseaufgaben wird erneut versucht, die Daten in DB in OCS zu schreiben .
(2) Die Schreibsynchronisierung von zwischengespeicherten Daten und das Konsistenzproblem mit DB
Mit zunehmender Größe der Website und verbesserter Zuverlässigkeit wird es mit der Bereitstellung mehrerer IDCs konfrontiert sein. Zu diesem Zeitpunkt ist die Cache-Konsistenz zu einem wichtigen Thema geworden.
Um eine hohe Effizienz zu gewährleisten, verhindert das Cache-System zunächst einmal Festplatten-E/A, auch wenn BINLOG geschrieben wird. Aus Leistungsgründen kann das Cache-System natürlich nur synchron löschen, also nicht synchron schreiben Die Synchronisierung hat im Allgemeinen Vorrang vor dem Eintreffen der DB-Synchronisation (schließlich ist die Effizienz des Cache-Systems viel höher). Dann gibt es ein Szenario, in dem sich keine Daten im Cache und alte Daten in der DB befinden. Zu diesem Zeitpunkt liegt eine Geschäftsanforderung für Daten vor und der Lesecache wird nicht gefunden. Die aus der Datenbank gelesenen und in den Cache geladenen alten Daten sind immer noch alte Daten. Wenn die DB-Datensynchronisierung eintrifft, wird nur die Datenbank aktualisiert. und die zwischengespeicherten schmutzigen Daten können nicht gelöscht werden.
Wie aus der obigen Situation ersichtlich ist, liegt die Hauptursache der Inkonsistenz darin, dass heterogene Systeme nicht zusammenarbeiten können. Es kann nicht garantiert werden, dass DB-Daten zuerst synchronisiert werden und zwischengespeicherte Daten später synchronisiert werden. Wir müssen also überlegen, wie das Cache-System auf die DB-Synchronisierung wartet, oder können die beiden einen Synchronisierungsmechanismus gemeinsam nutzen? Die Cache-Synchronisierung basiert auch auf DB BINLOG, was eine praktikable Lösung darstellt.
Die Datenbank in IDC1 wird über BINLOG mit der Datenbank in IDC2 synchronisiert. In diesem Fall generiert die IDC2-DB-Datenänderung auch ein eigenes BINLOG. Die zwischengespeicherte Datensynchronisierung kann über IDC2-DB BINLOG durchgeführt werden. Nachdem das Cache-Synchronisationsmodul das BINLOG analysiert hat, wird der entsprechende Cache-Schlüssel ungültig gemacht und die Synchronisation von parallel auf seriell geändert, um die Reihenfolge sicherzustellen.
(3) Cache-Penetration (DB erlitt unnötigen Abfrageverkehr)
Methode 1: Es ist ein Bloom-Filter. Es handelt sich um einen äußerst platzsparenden probabilistischen Algorithmus und eine Datenstruktur, mit der bestimmt wird, ob sich ein Element in einer Menge befindet (ähnlich wie Hashset). Sein Kern ist ein langer binärer Vektor und eine Reihe von Hash-Funktionen. Implementieren Sie den Bloom-Filter mit der Guave von Google. 1) Es kommt zu einer Fehlberechnungsrate. 2) Unter normalen Umständen können Elemente nicht aus dem Bloom-Filter gelöscht werden. 3) Der Prozess der Bestimmung der Array-Länge Hash-Funktionen sind komplex und die Verteilung. Was sind die Verwendungsszenarien des Long-Filters? 1) Spam-Adressfilterung (die Anzahl der Adressen ist riesig) 2) Crawler-URL-Adressdeduplizierung 3) Lösung des Cache-Aufschlüsselungsproblems
Methode 2: Leere Ergebnisse speichern und die Zeit für leere Ergebnisse festlegen
(4) Cache-Lawine ( Das Festlegen des Caches auf die gleiche Ablaufzeit führt zu einer DB-Flut)
Methode 1: Die meisten Systemdesigner erwägen die Verwendung von Sperren oder Warteschlangen, um Single-Thread-(Prozess-)Schreibvorgänge in den Cache sicherzustellen und so zu vermeiden, dass viele gleichzeitige Anforderungen fallen während eines Ausfalls Auf dem zugrunde liegenden Speichersystem
Methode 2: Zufällige Ablaufzeit
(5) Cache-Zusammenbruch (Hotkey, kleine Lawine, verursacht durch eine große Anzahl gleichzeitiger Leseanforderungen)
Wenn der Cache zu einem bestimmten Zeitpunkt abläuft Zu diesem Zeitpunkt gibt es eine große Anzahl gleichzeitiger Anforderungen für diesen Schlüssel. Wenn diese Anforderungen feststellen, dass der Cache abgelaufen ist, laden sie normalerweise Daten aus der Backend-Datenbank und setzen sie in den Cache zurück. Zu diesem Zeitpunkt können große gleichzeitige Anforderungen die Backend-Datenbank sofort überlasten
Methode 1: 1. Verwenden Sie den vom Verteilungscache unterstützten Mutex-Schlüssel (Mutex-Schlüssel), um einen Mutex-Schlüssel festzulegen. Wenn der Vorgang erfolgreich zurückgegeben wird, führen Sie die Ladedatenbank durch Der Vorgang wird ausgeführt und der Cache zurückgesetzt, d. h. es erfolgt nur eine Lade-DB-Thread-Verarbeitung.
Methode 2: Verwenden Sie den Mutex-Schlüssel im Voraus: Legen Sie einen Timeout-Wert (Timeout1) innerhalb des Werts fest. Timeout1 ist kleiner als das tatsächliche Memcache-Timeout (Timeout2). Wenn Timeout1 aus dem Cache gelesen wird, wird festgestellt, dass es abgelaufen ist Wenn es soweit ist, verlängern Sie sofort Timeout1 und setzen Sie es in den Cache zurück. Laden Sie dann die Daten aus der Datenbank und legen Sie sie in den Cache. Dies erhöht das Eindringen des Geschäftscodes und erhöht die Codierungskomplexität. : Aus der Sicht von Redis gibt es tatsächlich keine Ablaufzeit, was sicherstellt, dass es kein Problem mit dem Ablauf des Hotspot-Schlüssels gibt, das heißt, dass er nicht „physisch“ abläuft. Aus funktionaler Sicht, wenn er nicht abläuft Wird es nicht statisch? Wir speichern die Ablaufzeit im Wert, der dem Schlüssel entspricht. Wenn festgestellt wird, dass er bald abläuft, wird der Cache über einen asynchronen Hintergrundthread erstellt, der ein „logischer“ Ablauf ist
(6) Häufige Cache-Füllung und Datenverlust im Cache-System. Das Problem
muss auf der Grundlage eines bestimmten Geschäfts analysiert werden. Normalerweise verwenden wir die LRU-Strategie zur Bewältigung von Überläufen und die RDB- und AOF-Persistenzstrategien von Redis, um die Datensicherheit zu gewährleisten unter bestimmten Umständen
Weitere Kenntnisse zum Thema Programmierung finden Sie unter:Programmiervideo
Das obige ist der detaillierte Inhalt vonLassen Sie uns gemeinsam die Redis-Cache-Konsistenz, Cache-Penetration, Cache-Aufschlüsselung und Cache-Avalanche-Probleme analysieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

RedisiscassifizedasanosqldatabaseBecauseituseSakey-valuedatamodelinSteAfThetitionalrelationalDatabasemodel

Redis verbessert die Anwendungsleistung und die Skalierbarkeit, indem sie Daten zwischengespeichert und verteilte Verriegelung und Datenpersistenz implementiert. 1) Cache -Daten: Verwenden Sie Redis, um häufig auf Daten zugegriffen, um die Geschwindigkeit des Datenzugriffs zu verbessern. 2) Verteilte Schloss: Verwenden Sie Redis, um verteilte Sperren zu implementieren, um die Sicherheit des Betriebs in einer verteilten Umgebung zu gewährleisten. 3) Datenpersistenz: Stellen Sie die Datensicherheit durch RDB- und AOF -Mechanismen sicher, um den Datenverlust zu verhindern.

Das Datenmodell und die Struktur von Redis umfassen fünf Haupttypen: 1. String: Verwendet, um Text oder binäre Daten zu speichern, und unterstützt Atomoperationen. 2. Liste: Bestellte Elementssammlung, geeignet für Warteschlangen und Stapel. 3. SET: Ungeordnete einzigartige Elemente, unterstützende Set -Operation. V. 5. Hash Table (Hash): Eine Sammlung von Schlüsselwertpaaren, die zum Speichern von Objekten geeignet sind.

Die Datenbankmethoden von Redis umfassen In-Memory-Datenbanken und Schlüsselwertspeicher. 1) Redis speichert Daten im Speicher und liest und schreibt schnell. 2) Es wird Schlüsselwertpaare verwendet, um Daten zu speichern, unterstützt komplexe Datenstrukturen wie Listen, Sammlungen, Hash-Tabellen und geordnete Sammlungen, die für Caches und NoSQL-Datenbanken geeignet sind.

Redis ist eine leistungsstarke Datenbanklösung, da sie eine schnelle Leistung, umfangreiche Datenstrukturen, hohe Verfügbarkeit und Skalierbarkeit, Persistenzfunktionen und eine breite Palette von Ökosystemunterstützung bietet. 1) Extrem schnelle Leistung: Die Daten von Redis werden im Speicher gespeichert und verfügt über extrem schnelle Lesen und Schreibgeschwindigkeiten, die für Anwendungen mit hoher Parallelität und niedriger Latenz geeignet sind. 2) Reiche Datenstruktur: Unterstützt mehrere Datentypen wie Listen, Sammlungen usw., die für eine Vielzahl von Szenarien geeignet sind. 3) hohe Verfügbarkeit und Skalierbarkeit: Unterstützt die Master-Slave-Replikation und den Clustermodus, um eine hohe Verfügbarkeit und horizontale Skalierbarkeit zu erzielen. 4) Persistenz und Datensicherheit: Die Datenpersistenz werden durch RDB und AOF erreicht, um die Integrität und Zuverlässigkeit der Daten zu gewährleisten. 5) Weites Ökosystem und Unterstützung der Gemeinschaft: mit einem riesigen Ökosystem und einer aktiven Gemeinschaft.

Zu den wichtigsten Merkmalen von Redis gehören Geschwindigkeit, Flexibilität und Reich Datenstrukturunterstützung. 1) Geschwindigkeit: Redis ist eine In-Memory-Datenbank, und Lese- und Schreibvorgänge sind fast augenblicklich und für Cache und Sitzungsverwaltung geeignet. 2) Flexibilität: Unterstützt mehrere Datenstrukturen wie Zeichenfolgen, Listen, Sammlungen usw., die für die komplexe Datenverarbeitung geeignet sind. 3) Unterstützung bei der Datenstruktur: Bietet Zeichenfolgen, Listen, Sammlungen, Hash -Tabellen usw., die für unterschiedliche Geschäftsanforderungen geeignet sind.

Die Kernfunktion von Redis ist ein Hochleistungs-In-Memory-Datenspeicher- und Verarbeitungssystem. 1) Hochgeschwindigkeitsdatenzugriff: Redis speichert Daten im Speicher und bietet Lese- und Schreibgeschwindigkeit auf Mikrosekunden. 2) Reiche Datenstruktur: Unterstützt Zeichenfolgen, Listen, Sammlungen usw. und passt an eine Vielzahl von Anwendungsszenarien. 3) Persistenz: Behalten Sie Daten an, um durch RDB und AOF zu diskutieren. 4) Abonnement veröffentlichen: Kann in Nachrichtenwarteschlangen oder Echtzeit-Kommunikationssystemen verwendet werden.

Redis unterstützt eine Vielzahl von Datenstrukturen, darunter: 1. String, geeignet zum Speichern von Einzelwertdaten; 2. Liste, geeignet für Warteschlangen und Stapel; 3.. SET, verwendet zum Speichern nicht duplikatischer Daten; V. 5. Hash -Tabelle, geeignet zum Speichern von Objekten oder strukturierten Daten.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver Mac
Visuelle Webentwicklungstools

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.