Die Cache-Schicht überträgt eine große Anzahl von Anforderungen und schützt so die Speicherschicht effektiv. Wenn jedoch aufgrund einer großen Anzahl von Cache-Ausfällen eine große Anzahl von Anforderungen auf der Speicherschicht eintrifft oder der gesamte Cache keine Dienste bereitstellen kann, erhöht sich die Belastung der Speicherschicht (eine große Anzahl von Anforderungen fragt die Datenbank ab). Dies ist das Szenario einer Cache-Lawine.
Um die Cache-Lawine zu lösen, können Sie von den folgenden Punkten ausgehen:
1 Halten Sie die Cache-Ebene hoch verfügbar.
Verwenden Sie den Redis-Sentry-Modus oder die Redis-Cluster-Bereitstellungsmethode, d. h. individuell Redis-Knoten gehen offline. Die gesamte Cache-Ebene ist weiterhin verfügbar. Darüber hinaus kann Redis in mehreren Computerräumen bereitgestellt werden, sodass die Cache-Schicht auch bei einem Computerraumabsturz weiterhin hochverfügbar ist.
2. Strombegrenzende und herabstufende Komponenten
Sowohl die Cache-Schicht als auch die Speicherschicht weisen eine Fehlerwahrscheinlichkeit auf und können als Ressourcen betrachtet werden. Da es sich um ein verteiltes System mit hoher Parallelität handelt, kann es, wenn eine Ressource nicht verfügbar ist, zu Ausnahmen kommen, wenn alle Threads diese Ressource erhalten, wodurch das gesamte System nicht verfügbar ist. Ein Downgrade ist in Systemen mit hoher Parallelität ganz normal. Wenn beispielsweise bei Empfehlungsdiensten der personalisierte Empfehlungsdienst nicht verfügbar ist, können Sie ein Downgrade durchführen, um die Hotspot-Daten zu ergänzen, sodass nicht der gesamte Empfehlungsdienst nicht verfügbar ist. Zu den gängigen strombegrenzenden Degradationskomponenten gehören Hystrix, Sentinel usw.
3. Der Cache läuft nicht ab
Die in Redis gespeicherten Schlüssel laufen nie ab, sodass es kein Problem gibt, dass eine große Anzahl von Caches gleichzeitig ausfällt, aber dann benötigt Redis mehr Speicherplatz.
4. Optimieren Sie die Cache-Ablaufzeit
Wählen Sie beim Entwerfen des Caches eine geeignete Ablaufzeit für jeden Schlüssel, um zu vermeiden, dass eine große Anzahl von Schlüsseln gleichzeitig ungültig wird und eine Cache-Lawine verursacht.
5. Verwenden Sie die Mutex-Sperre, um den Cache neu zu erstellen.
Um zu vermeiden, dass eine große Anzahl von Anforderungen gleichzeitig die Speicherebene erreicht, um Daten abzufragen und den Cache neu aufzubauen, können Sie die Mutex-Sperrsteuerung verwenden. B. das Abfragen von Daten auf der Cache-Schicht gemäß dem Schlüssel. Wenn die Cache-Schicht erreicht wird, wird der Schlüssel gesperrt, dann werden die Daten von der Speicherschicht abgefragt, die Daten werden in die Cache-Schicht geschrieben und schließlich wird die Sperre aufgehoben . Wenn andere Threads feststellen, dass das Erlangen der Sperre fehlschlägt, lassen Sie den Thread eine Zeit lang ruhen und versuchen Sie es erneut. Was den Sperrtyp betrifft: Wenn Sie sich in einer eigenständigen Umgebung befinden, können Sie Lock unter dem Java-Concurrent-Paket verwenden. Wenn Sie sich in einer verteilten Umgebung befinden, können Sie die verteilte Sperre (SETNX-Methode in Redis) verwenden.
Cache-Pseudocode für die Mutex-Sperre-Rekonstruktion in einer verteilten Umgebung
/** * 互斥锁建立缓存 * **/ public String get(String key) { // redis中查询key对应的value String value = redis.get(key); // 缓存未命中 if (value == null) { // 互斥锁 String key_mutex_lock = "mutex:lock" + key; // 互斥锁加锁成功 if(redis.setnx(key_mutex_lock,"1")) { // 返回 0(false),1(true) try { // 设置互斥锁超时时间,这里设置的是锁的失效时间,而不是key的失效时间 redis.expire(key_mutex_lock,3*60); // 从数据库查询 value = db.get(key); // 数据写入缓存 redis.set(key,value); } finally { // 释放锁 boolean keyExist = jedis.exists(key_mutex_lock); if(keyExist){ redis.delete(key_mutex_lock); } } else { // 加锁失败,线程休息50ms后重试 Thread.sleep(50); return get(key); // 直接返回缓存结果 } } }
Verwendung einer verteilten Redis-Sperre zur Implementierung der Cache-Rekonstruktion in einer verteilten Umgebung. Der Vorteil besteht darin, dass die Designidee einfach ist und die Datenkonsistenz gewährleistet ist , und es kann dazu führen, dass der Benutzer wartet. Gehen Sie davon aus, dass bei hoher Parallelität der Schlüssel während der Cache-Rekonstruktion gesperrt ist. Wenn derzeit 1.000 gleichzeitige Anforderungen vorliegen, werden 999 davon blockiert, was dazu führt, dass 999 Benutzeranforderungen blockiert werden und warten.
6. Asynchrone Cache-Rekonstruktion
Bei diesem Schema wird der Cache mithilfe einer asynchronen Strategie erstellt. Threads werden aus dem Thread-Pool abgerufen, sodass nicht alle Anforderungen direkt die Speicherschicht erreichen Dieses Schema bedeutet eine logische Zeitüberschreitung bei der Schlüsselwartung. Wenn die logische Zeitüberschreitung unter der aktuellen Zeit liegt, bedeutet dies, dass der aktuelle Cache abgelaufen ist und der Cache aktualisiert werden sollte wird direkt zurückgegeben. In Redis ist beispielsweise die Ablaufzeit des Schlüssels auf 60 Minuten und die logische Ablaufzeit im entsprechenden Wert auf 30 Minuten festgelegt. Auf diese Weise kann der Cache dieses Schlüssels asynchron aktualisiert werden, wenn der Schlüssel die logische Ablaufzeit von 30 Minuten erreicht. Während des Aktualisierungszeitraums des Caches ist der alte Cache jedoch weiterhin verfügbar. Diese asynchrone Cache-Rekonstruktionsmethode kann wirksam verhindern, dass eine große Anzahl von Schlüsseln gleichzeitig ungültig wird.
/** * 异步重建缓存: ValueObject为对应的封装的实体模型 * **/ public String get(String key) { // 重缓存中查询key对应的ValueObject对象 ValueObject valueObject = redis.get(key); // 获取存储中对应的value值 String value = valueObject.getValue(); // 获取实体模型中的缓存过期的时间:timeOut = 设置缓存时的当前时间+过期时间(如30秒,60秒等等) long logicTimeOut = valueObject.getTimeOut(); // 等位换算为long类型 // 当前可以在逻辑上失效 if (logicTimeOut <= System.currentTimeMillis()) { // 异步更新缓存 threadPool.execute(new Runnable() { String key_mutex_lock = "mutex_lock" + key; // 互斥锁加锁成功 if(redis.setnx(key_mutex_lock,"1")) { // 返回 0(false),1(true) try { // 设置互斥锁超时时间,这里设置的是锁的失效时间,而不是key的失效时间 redis.expire(key_mutex_lock,3*60); // 从数据库查询 dbValue = db.get(key); // 数据写入缓存 redis.set(key,dbValue); } finally { // 释放锁 boolean keyExist = jedis.exists(key_mutex_lock); if(keyExist){ redis.delete(key_mutex_lock); } } } else { } }); return value; // 直接返回缓存结果 } }
Das obige ist der detaillierte Inhalt vonSo lösen Sie das Redis-Cache-Lawinenproblem. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Redis ist eine NoSQL -Datenbank, die eine hohe Leistung und Flexibilität bietet. 1) Speichern Sie Daten über Schlüsselwertpaare, die für die Verarbeitung großer Daten und hoher Parallelität geeignet sind. 2) Speicherspeicher- und Single-Thread-Modelle sorgen für schnelles Lesen und Schreiben und Atomizität. 3) Verwenden Sie RDB- und AOF-Mechanismen, um Daten zu bestehen, wodurch hohe Verfügbarkeit und Skalierung unterstützt werden.

Redis ist ein Speichersystem für Speicherdatenstruktur, das hauptsächlich als Datenbank, Cache und Message Broker verwendet wird. Zu den Kernmerkmalen gehören ein Einzel-Thread-Modell, E/A-Multiplexing, Persistenzmechanismus, Replikations- und Clustering-Funktionen. Redis wird üblicherweise in praktischen Anwendungen für Caching-, Sitzungsspeicher- und Nachrichtenwarteschlangen verwendet. Es kann seine Leistung erheblich verbessern, indem die richtige Datenstruktur ausgewählt, Pipelines und Transaktionen verwendet und überwacht und stimmt.

Der Hauptunterschied zwischen Redis- und SQL-Datenbanken besteht darin, dass Redis eine In-Memory-Datenbank ist, die für hohe Leistung und Flexibilitätsanforderungen geeignet ist. Die SQL -Datenbank ist eine relationale Datenbank, die für komplexe Abfragen und Datenkonsistenzanforderungen geeignet ist. Insbesondere 1) REDIS bietet Hochgeschwindigkeits-Datenzugriffs- und Caching-Dienste und unterstützt mehrere Datentypen, die für die Verarbeitung von Caching und Echtzeit geeignet sind. 2) Die SQL-Datenbank verwaltet Daten über eine Tabellenstruktur, unterstützt komplexe Abfragen und Transaktionsverarbeitung und eignet sich für Szenarien wie E-Commerce- und Finanzsysteme, die Datenkonsistenz erfordern.

RedisactsasbothadatastoreandService.1) Asadatastore, itusesin-MemoryStorageForfastoperationen, unterstützende Variiousdatastructures Likekey-Valuepairs und sortierte Sets.2) Asasservice, ItprovidesFunctionalitys Likespub/SubMessing-SetsandluascriptingForComplexoperationen

Im Vergleich zu anderen Datenbanken hat Redis die folgenden einzigartigen Vorteile: 1) extrem schnelle Geschwindigkeit, und Lese- und Schreibvorgänge befinden sich normalerweise auf Mikrosekunde; 2) unterstützt reichhaltige Datenstrukturen und Operationen; 3) Flexible Nutzungsszenarien wie Caches, Zähler und Veröffentlichung von Abonnements. Bei der Auswahl von Redis oder anderen Datenbanken hängt dies von den spezifischen Anforderungen und Szenarien ab. Redis spielt eine gute Leistung in leistungsstarken und niedrigen Latenzanwendungen.

Redis spielt eine Schlüsselrolle bei der Datenspeicherung und -verwaltung und ist durch seine mehreren Datenstrukturen und Persistenzmechanismen zum Kern moderner Anwendungen geworden. 1) Redis unterstützt Datenstrukturen wie Zeichenfolgen, Listen, Sammlungen, geordnete Sammlungen und Hash -Tabellen und eignet sich für Cache und komplexe Geschäftslogik. 2) RDB und AOF sorgt durch zwei Persistenzmethoden für eine zuverlässige Speicherung und eine schnelle Wiederherstellung von Daten.

Redis ist eine NoSQL-Datenbank, die für einen effizienten Speicher und Zugriff auf groß angelegte Daten geeignet ist. 1.Redis ist ein Open Source -Speicherdatenstruktur -Speichersystem, das mehrere Datenstrukturen unterstützt. 2. Es bietet extrem schnelle Lektüre und Schreibgeschwindigkeiten, geeignet für Caching, Sitzungsmanagement usw. 3.Redis unterstützt die Persistenz und sorgt für die Datensicherheit durch RDB und AOF. 4. Verwendungsbeispiele umfassen grundlegende Schlüsselwertpaarvorgänge und erweiterte Sammeldeduplizierungsfunktionen. 5. Zu den häufigen Fehlern gehören Verbindungsprobleme, Datentypfehlanpassungen und Speicherüberlauf, sodass Sie auf das Debuggen achten müssen. 6. Vorschläge zur Leistungsoptimierung umfassen die Auswahl der geeigneten Datenstruktur und die Einrichtung von Strategien zur Speicherung der Speicherung.

Zu den Anwendungen von Redis in der realen Welt gehören: 1. Als Cache-System beschleunigen Sie die Datenbankabfrage, 2. Um die Sitzungsdaten von Webanwendungen zu speichern, um in Echtzeit-Rankings zu implementieren, 4. Um die Nachrichtenzustellung als Nachrichtenwarteschlange zu vereinfachen. Redis 'Vielseitigkeit und hohe Leistung lassen es in diesen Szenarien glänzen.


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

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

Dreamweaver Mac
Visuelle Webentwicklungstools

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),
