Heim  >  Artikel  >  Datenbank  >  Wie wird der Hotspot-Schlüssel in Redis generiert? Wie kann man es lösen?

Wie wird der Hotspot-Schlüssel in Redis generiert? Wie kann man es lösen?

青灯夜游
青灯夜游nach vorne
2021-09-22 20:18:194805Durchsuche

Der folgende Artikel wird Ihnen helfen, die Hotspot-Schlüssel in Redis zu verstehen, die Gründe für die Generierung von Hotspot-Schlüsseln, Möglichkeiten zum Erkennen von Hotspot-Schlüsseln und Lösungen für Hotspot-Schlüssel vorzustellen. Ich hoffe, er wird für alle hilfreich sein!

Wie wird der Hotspot-Schlüssel in Redis generiert? Wie kann man es lösen?

Die Gründe für die Hotkey-Generierung

1 Die von Benutzern verbrauchten Daten sind viel größer als die erzeugten Daten

Das Hotkey-Problem besteht darin, dass es eine große Anzahl von Zugriffsanfragen gibt Ein fester Schlüssel auf Redis führt zu einem bestimmten Zeitpunkt zu einem Cache-Ausfall und Anfragen, die die Datenbank erreichen, wodurch der Cache-Dienst und der DB-Dienst überlastet werden und somit die Verfügbarkeit von Anwendungsdiensten beeinträchtigt wird. [Verwandte Empfehlungen: Redis-Video-Tutorial]

Die häufigsten sind heiße Suchanfragen auf Weibo, wie z. B. XX-Promi-Ehe/Betrug. Dann erhöht sich der Schlüssel um XX Stern sofort und es treten Probleme mit heißen Daten auf. Auch Weibo stürzt ab und zu ab.

In ähnlicher Weise verursachen heiße Nachrichten, heiße Kommentare, Live-Übertragungen von Prominenten usw., die weit verbreitet und angesehen werden, auch diese typischen Szenarien, in denen man mehr liest und weniger schreibt.

2. Die Anforderungsfragmentierung ist konzentriert und überschreitet die Leistungsgrenze eines einzelnen Servers.

Wenn der Server Daten für den Zugriff liest, werden die Daten häufig weiterverarbeitet Auf einen bestimmten Host-Server wird zugegriffen. Wenn der Zugriff das Serverlimit überschreitet, treten Hotkey-Probleme auf. 分片

Die Gefahren von Hotkey-Problemen

Wie wird der Hotspot-Schlüssel in Redis generiert? Wie kann man es lösen?

1 Der Datenverkehr konzentriert sich und erreicht die Obergrenze der physischen Netzwerkkarte.

Wenn die Anfrage nach einem bestimmten Hotspot-Schlüssel die Obergrenze der Netzwerkkarte des Hosts auf einem bestimmten Host überschreitet, können andere Dienste auf dem Server aufgrund einer übermäßigen Verkehrskonzentration nicht ausgeführt werden.

2. Es gibt zu viele Anfragen und der Cache-Sharding-Dienst ist fehlgeschlagen.

Wenn Hotspots zu konzentriert sind und der Cache der Hotspot-Schlüssel zu groß ist und die aktuelle Cache-Kapazität überschreitet, ist der Cache-Sharding-Dienst überlastet.

3. DB-Panne, die eine Geschäftslawine auslöst.

Wenn der Cache-Dienst abstürzt und zu diesem Zeitpunkt eine weitere Anforderung generiert wird, wird diese in der Hintergrund-Datenbank zwischengespeichert. Aufgrund der schwachen Leistung der Datenbank selbst kann es bei großen Anforderungen leicht zu einer Anforderungseindringung kommen. Dies führt zu einem Lawinenphänomen, das die Leistung der Ausrüstung erheblich beeinträchtigt.

Entdeckung von Hotkeys

1. Nutzen Sie Geschäftserfahrung, um abzuschätzen, welche Hotkeys

Tatsächlich ist diese Methode durchaus machbar. Wenn beispielsweise ein Produkt im Flash-Sale ist, kann die Taste dieses Produkts als Hotkey eingestuft werden. Der Nachteil liegt auf der Hand. Nicht alle Unternehmen können abschätzen, welche Tasten Hotkeys sind.

2. Sammeln Sie auf der Clientseite

Diese Methode besteht darin, eine Codezeile für Datenstatistiken hinzuzufügen, bevor Redis ausgeführt wird. Es gibt viele Möglichkeiten, Daten zu sammeln. Dies kann auch darin bestehen, eine Benachrichtigung an ein externes Kommunikationssystem zu senden. Der Nachteil besteht darin, dass es zu einem Eingriff in den Client-Code kommt.

3. Sammlung auf der Proxy-Ebene

Kunde
Proxy
redis1
redis2
redis3

Einige Clusterarchitekturen sind wie folgt: Proxy kann Twemproxy sein ist der einheitliche Eingang. Die Erfassung und Berichterstellung kann auf der Proxy-Ebene erfolgen, der Nachteil liegt jedoch auf der Hand. Nicht alle Redis-Cluster-Architekturen verfügen über Proxys. Twemproxy,是统一的入口。可以在Proxy层做收集上报,但是缺点很明显,并非所有的redis集群架构都有proxy。

4、用redis自带命令

  • monitor命令:该命令可以实时抓取出redis服务器接收到的命令,然后写代码统计出热key是啥。当然,也有现成的分析工具可以给你使用,比如redis-faina。但是该命令在高并发的条件下,有内存增暴增的隐患,还会降低redis的性能。
  • hotkeys参数:redis 4.0.3提供了redis-cli的热点key发现功能,执行redis-cli时加上–hotkeys选项即可。但是该参数在执行的时候,如果key比较多,执行起来比较慢。

5、自己抓包评估

Redis客户端使用TCP协议与服务端进行交互,通信协议采用的是RESP。自己写程序监听端口,按照RESP协议规则解析数据,进行分析。缺点就是开发成本高,维护困难,有丢包可能性。

以上五种方案,各有优缺点。根据自己业务场景进行抉择即可。

热点Key的解决方案

1、利用二级缓存

比如利用ehcachespring cache,甚至是一个HashMap都可以。在你发现热key以后,把热key加载到系统的JVM中。

针对这种热key请求,会直接从jvm中取,而不会走到redis层。

假设此时有十万个针对同一个key的请求过来,如果没有本地缓存,这十万个请求就直接怼到同一台redis上了。
现在假设,你的应用层有50台机器,OK,你也有jvm缓存了。这十万个请求平均分散开来,每个机器有2000个请求,会从JVM中取到value值,然后返回数据。避免了十万个请求怼到同一台redis上的情形。

2、读写分离

读写分离就是将同为 Write 的请求发送到 Master 模块内,而将 Read 的请求发送至 ReadOnly

4. Verwenden Sie den integrierten Befehl von redis

  • monitor command stark>: Dieser Befehl kann die vom Redis-Server empfangenen Befehle in Echtzeit erfassen und dann Code schreiben, um die Hotkeys zu zählen. Natürlich gibt es auch fertige Analysetools, die Sie nutzen können, wie zum Beispiel redis-faina. Unter Bedingungen hoher Parallelität birgt dieser Befehl jedoch die versteckte Gefahr einer plötzlichen Speichervergrößerung und verringert auch die Leistung von Redis.
  • hotkeys-Parameter: Redis 4.0.3 bietet die Hotkey-Erkennungsfunktion von redis-cli. Fügen Sie beim Ausführen von redis-cli die Option –hotkeys hinzu. Dürfen. Wenn dieser Parameter jedoch ausgeführt wird und viele Schlüssel vorhanden sind, ist die Ausführung langsamer.
5. Erfassen und bewerten Sie Ihre eigenen Pakete

Redis-Client verwendet TCP-Protokoll und Server Für die Interaktion verwendet das Kommunikationsprotokoll RESP. Schreiben Sie Ihr eigenes Programm, um den Port zu überwachen, die Daten gemäß den RESP-Protokollregeln zu analysieren und Analysen durchzuführen. Die Nachteile sind hohe Entwicklungskosten, schwierige Wartung und die Möglichkeit eines Paketverlusts.

Die oben genannten fünf Optionen haben jeweils ihre eigenen Vor- und Nachteile. Treffen Sie einfach eine Entscheidung basierend auf Ihrem Geschäftsszenario.

Lösung für Hotspot-Schlüssel

1. Auslastung 2 Cache🎜🎜Verwenden Sie beispielsweise ehcache, spring cache oder sogar eine HashMap. Nachdem Sie den Hotkey entdeckt haben, laden Sie ihn in die JVM des Systems. 🎜🎜Für diese Art von Hotkey-Anfrage wird sie direkt von der JVM abgerufen, ohne zur Redis-Ebene zu gehen. 🎜🎜Angenommen, es gibt zu diesem Zeitpunkt 100.000 Anfragen für denselben Schlüssel. Wenn kein lokaler Cache vorhanden ist, werden diese 100.000 Anfragen direkt an denselben Redis gesendet.
Angenommen, Ihre Anwendungsschicht verfügt über 50 Maschinen. OK, Sie haben auch einen JVM-Cache. Diese 100.000 Anfragen werden gleichmäßig verteilt und jede Maschine hat 2.000 Anfragen. Der Wert wird von der JVM abgerufen und dann werden die Daten zurückgegeben. Dadurch wird vermieden, dass Hunderttausende Anfragen an denselben Redis gesendet werden. 🎜🎜2. Lese- und Schreibtrennung🎜🎜Die Lese- und Schreibtrennung besteht darin, Anforderungen zu trennen, die beide Schreiben wird an das Modul <code>Master gesendet, und die Anforderung Read wird an das Modul ReadOnly gesendet. 🎜🎜Die schreibgeschützten Knoten im Modul können weiter erweitert werden und dieser Schlüssel kann in mehreren Redis gespeichert werden. Wenn eine Hotkey-Anfrage eingeht, wählen wir zufällig einen Redis-Server mit Backup aus, greifen auf den Wert zu und geben die Daten zurück. Dadurch wird das Problem des Hot Reading effektiv gelöst. 🎜🎜Die Trennung von Lesen und Schreiben bietet außerdem die Vorteile einer flexiblen Erweiterung der Lese-Hotspot-Funktionen, der Möglichkeit, eine große Anzahl von Hotspot-Schlüsseln zu speichern, und der Kundenfreundlichkeit. 🎜🎜Weitere Kenntnisse zum Thema Programmierung finden Sie unter: 🎜Programmiervideos🎜! ! 🎜

Das obige ist der detaillierte Inhalt vonWie wird der Hotspot-Schlüssel in Redis generiert? Wie kann man es lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen