[2023] Redis Cache Hohe Parallelität

1. Redis-Cache

Redis ist ein leistungsstarkes Speichersystem für Schlüssel-Wert-Paare, das eine Vielzahl von Datenstrukturen unterstützt, darunter Zeichenfolgen, Hashes, Listen und geordnete Mengen. Sein Caching-Mechanismus ist ebenfalls sehr leistungsfähig und unterstützt mehrere Caching-Strategien, einschließlich Cache-Erwärmung, Cache-Ablauf, Cache-Überwachung usw.

Der Redis-Cache kann verwendet werden, um stark gleichzeitige Anforderungen zu verarbeiten, die Datenbanklast zu reduzieren und die Systemleistung zu verbessern. Es kann häufig verwendete Daten für einen schnellen Zugriff im Speicher speichern, wodurch die Anzahl der Abfragen an die Datenbank reduziert und die Antwortgeschwindigkeit verbessert wird.

Eine einzelne Redis-Instanz kann Zehntausende oder sogar Hunderttausende gleichzeitiger Lesevorgänge pro Sekunde unterstützen. Dies hängt jedoch von der Konfiguration und Leistungsoptimierung von Redis sowie den spezifischen Anforderungen der Anwendung ab.

1.1. Zu den Vorteilen des Redis-Cache gehören:

  • Hohe Leistung: Redis unterstützt mehrere Datenstrukturen und Caching-Strategien, wodurch die Geschwindigkeit beim Lesen und Schreiben von Daten erheblich verbessert werden kann.
  • Skalierbarkeit: Redis unterstützt die verteilte Bereitstellung und kann einen höheren gleichzeitigen Zugriff unterstützen, ohne die Hardwareressourcen zu erhöhen.
  • Zuverlässigkeit: Redis unterstützt mehrere Datensicherungs- und Fehlerbehebungsmethoden, die Datensicherheit und -integrität gewährleisten können.
  • Benutzerfreundlichkeit: Redis bietet eine Vielzahl von APIs und SDKs, unterstützt mehrere Programmiersprachen und kann problemlos in bestehende Systeme integriert werden.

1.2. Zu den Nachteilen des Redis-Cache gehören:

  • Begrenzter Datenspeicher: Redis verfügt über eine begrenzte Speicherkapazität und kann nicht zu viele Daten speichern. Daher müssen die Daten vor der Verwendung des Redis-Cache bereinigt und komprimiert werden, um eine einfache Speicherung zu ermöglichen.
  • Cache-Ablauf: Wenn die Cache-Daten nicht rechtzeitig gelöscht werden oder die Ablaufzeit des Caches abgelaufen ist, gehen die Daten im Cache verloren. Daher ist es erforderlich, die Daten im Cache regelmäßig zu löschen oder die Ablaufzeit des Caches festzulegen.
  • Sicherheit des gleichzeitigen Zugriffs: Wenn es keine Sicherheitskontrolle für den gleichzeitigen Zugriff gibt, können zwischengespeicherte Daten manipuliert werden oder in Konflikt geraten. Daher ist es notwendig, eine Sicherheitskontrolle beim gleichzeitigen Zugriff durchzuführen, um die Sicherheit und Integrität des Caches zu gewährleisten.

In einem Szenario mit hoher Parallelität kann der Cache mit den folgenden Problemen konfrontiert sein:

2. Cache-Lawine

Cache-Lawine bezieht sich auf eine Situation, in der eine große Datenmenge gleichzeitig auf das Cache-System zugreift, was zu einer übermäßig hohen Belastung des Cache- 服务器宕机Systems führt 缓存数据丢失.

如果发生在服务器宕机的情况:Redis kann im Cluster-Modus bereitgestellt werden, um sicherzustellen, dass eine Kopie der Daten auf mehreren Knoten vorhanden ist, sodass auch dann, wenn ein einzelner Knoten nicht verfügbar ist, stattdessen andere Knoten verwendet werden.

Bei einer größeren Skalierung kann der Redis-Cluster auch über Computerräume hinweg bereitgestellt werden, und der Master-Knoten und der Slave-Knoten werden in unterschiedlichen Computerräumen bereitgestellt, um die Anforderungen der Notfallwiederherstellung zu erfüllen.

人为制造雪崩:Ob beabsichtigt oder unbeabsichtigt, kurz gesagt: Wenn Sie den Server neu starten müssen, ohne die zwischengespeicherten Daten beizubehalten, sind die Daten nach dem Neustart des Servers leer, was eine künstliche Lawine darstellt, sodass Sie beim Neustart vorsichtig sein müssen.

大量缓存失效:Manchmal werden die zwischengespeicherten Daten zentral vorgewärmt. Wenn Sie beispielsweise die Daten jeden Tag zu einer bestimmten Zeit im Cache aktualisieren, kann dies dazu führen, dass eine große Anzahl von Caches gleichzeitig und nach einer bestimmten Zeitspanne plötzlich aktualisiert wird Zeit Zentralisierter Ausfall. Sie können einen Bereich von Zufallszahlen basierend auf der ursprünglichen Ablaufzeit festlegen, sodass selbst bei gleichzeitiger Aktualisierung kein zentraler Fehler auftritt.

3. Cache-Penetration

Cache-Penetration bedeutet, dass bei einer Anforderung von Daten, die nicht im Cache vorhanden sind, die Anforderung direkt auf die Datenbank zugreift. Wenn die angeforderten Daten nicht in der Datenbank vorhanden sind, wird die Anforderung bis zur Verarbeitung wiederholt ausgegeben, was zu einer großen Anzahl ungültiger Datenbankanforderungen führt und dadurch die Leistung des Systems beeinträchtigt.

Typischerweise wird diese Art von Angriff von einem böswilligen Angreifer gestartet, der eine große Anzahl von Anfragen sendet, um zu testen, ob die gewünschten Daten im System vorhanden sind. Das Problem der Cache-Penetration kann durch den Einsatz von Techniken wie Bloom-Filtern gelöst werden.

Lösungen:

1️⃣: Bloom-Filter: Verwenden Sie den Bloom-Filter in Redis, um alle möglichen Anforderungsparameter zu speichern. Wenn eine Anforderung eingeht, beurteilen Sie zunächst mithilfe des Bloom-Filters, ob die Anforderung innerhalb des Bereichs möglicher Parameter liegt. Wenn nicht, wird direkt kein Ergebnis zurückgegeben.

2️⃣: Cache-Leerwert: Speichern Sie ein leeres Objekt im Cache, z. B. Null oder eine leere Zeichenfolge, und geben Sie das leere Objekt direkt zurück, wenn die Daten nicht im Cache abgefragt werden können.

3️⃣: Schnittstellenstrombegrenzung: Beschränken Sie den Zugriff auf die Schnittstelle, indem Sie beispielsweise Redis verwenden, um den Token-Bucket-Strom zu begrenzen.

4️⃣: Datenvorwärmung: Beim Systemstart werden beliebte Daten im Cache vorgewärmt, um sicherzustellen, dass genügend Daten im Cache vorhanden sind, um ein Eindringen in den Cache zu vermeiden.

4. Cache-Treffer

Wenn unser Schlüssel abgelaufen ist, dieser Schlüssel aber wieder beliebt ist, kann dieser Datenverkehr über Redis eindringen und in die Datenbank gelangen. Wenn die Parallelität groß ist, kann die Datenbank zerstört werden.

Ziehen Sie für diese Situation die folgenden Lösungen in Betracht:

1️⃣: Für einige gängige Schlüssel ist die Ablaufzeit nicht festgelegt, aber ihr Wert wird regelmäßig aktualisiert.
2️⃣: Logischer Ablauf. Wenn die Daten ablaufen, lassen Sie die Aufgabe den Cache asynchron aktualisieren und setzen Sie die Ablaufzeit und die logische Ablaufzeit zurück.

3️⃣: Gegenseitige Ausschlusssperre, d. h. jedes Mal, wenn der Schlüssel nicht vorhanden ist, wird nur ein Thread gesperrt, um die tatsächlichen Daten in der Datenbank abzufragen, und andere Threads warten, bis sie aktiviert werden, um den Cache erneut zu überprüfen, und dann können die zwischengespeicherten Daten überprüft werden direkt zurückgegeben werden.

5. Der Cache ist voll

„Cache voll“ bezieht sich auf den Zustand, in dem der gesamte verfügbare Speicherplatz im Cache-System gefüllt ist. Wenn in diesem Fall neue Daten zwischengespeichert werden müssen, muss das Cache-System einige zwischengespeicherte Daten löschen, um Platz für neue Daten zu schaffen.

Ein voller Cache kann die Systemleistung beeinträchtigen, denn wenn das Caching-System zwischengespeicherte Daten löschen muss, dauert es länger, die Daten zu finden und zu löschen, was die Reaktionszeit des Systems erhöht.

Um zu verhindern, dass der Cache voll wird, kann die Leistung des Cache-Systems durch Erhöhen der Cache-Größe oder Verwendung eines effizienteren Cache-Algorithmus verbessert werden.

Die Obergrenze wird durch die Konfiguration maxmemorybestimmt

Der Cache ist im Allgemeinen voll, wenn Daten 没设置过期时间oder Daten vorliegen设置过期时间不合理

Es kann mit diesen Methoden gelöst werden:

1️⃣: Speicherisolation. Trennen Sie einige Daten, die nicht ablaufen, von den normalen Cache-Daten

2️⃣: Kapazitätsüberwachung, Überwachung des Speichers, Überwachung der Schlüsselablaufzeit usw.

Supongo que te gusta

Origin blog.csdn.net/qq_42527269/article/details/131345162
Recomendado
Clasificación