Normalerweise geben wir der Verwendung des Redis-Cache Vorrang, um die Belastung durch den Datenbankzugriff zu verringern. Wir werden jedoch auch auf die folgende Situation stoßen: Wenn eine große Anzahl von Benutzern auf unser System zugreift, fragen sie zuerst den Cache ab. Wenn sich keine Daten im Cache befinden, fragen sie die Datenbank ab und aktualisieren dann die Daten im Cache. und wenn sich die Daten in der Datenbank geändert haben, müssen sie mit Redis synchronisiert werden. Während des Synchronisierungsprozesses muss die Datenkonsistenz zwischen MySQL und Redis sichergestellt werden Letztendlich ist es notwendig, die Konsistenz zwischen MySQL und dem Cache sicherzustellen.
//我们通常使用redis的逻辑 //通常我们是先查询reids String value = RedisUtils.get(key); if (!StringUtils.isEmpty(value)){ return value; } //从数据库中获取数据 value = getValueForDb(key); if (!StringUtils.isEmpty(value)){ RedisUtils.set(key,value); return value; }
Die Strategie zum verzögerten doppelten Löschen ist eine gängige Strategie für die Datenbankspeicherung und den Cache von Daten, um die Konsistenz in verteilten Systemen aufrechtzuerhalten, sie ist jedoch nicht stark konsistent. Unabhängig davon, welche Lösung verwendet wird, kann das Problem schmutziger Daten in Redis nur durch Synchronisierungssperren und entsprechende Geschäftslogikebenen gelöst werden.
Wenn wir Datenbankdaten aktualisieren, müssen wir im Allgemeinen die in Redis zwischengespeicherten Daten synchronisieren, daher geben wir im Allgemeinen zwei Lösungen an:
Eine Lösung : Führen Sie zuerst den Aktualisierungsvorgang und dann das Löschen des Caches durch.
Die zweite Option: Zuerst den Cache löschen und dann den Aktualisierungsvorgang durchführen.
Allerdings sind diese beiden Lösungen bei gleichzeitigen Anfragen anfällig für die folgenden Probleme
Nachteile einer Lösung: Nachdem Anforderung 1 den Datenbankaktualisierungsvorgang durchgeführt hat, aber bevor der Cache geleert wurde, kommt Anforderung 2, um den Cache abzufragen. Zu diesem Zeitpunkt handelt es sich bei den Daten im Cache noch um alte Daten, und das war noch nicht der Fall Nachdem t1 den Cache-Löschvorgang durchgeführt hat, können nachfolgende Anforderungen den Cache nicht abfragen und dann nicht im Cache aktualisieren.
Nachteile der zweiten Lösung: Wenn Anforderung 1 den Cache löscht, aber den Datenaktualisierungsvorgang noch nicht durchgeführt hat , Anfrage 2 kommt herein Die alten Daten der Datenbank werden abgefragt und in Redis geschrieben, was zu dem Problem der Inkonsistenz zwischen der Datenbank und den Redis-Daten führt.
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die verzögerte Doppellöschstrategie von Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!