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!
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. 分片
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.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
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自带命令
redis-faina
。但是该命令在高并发的条件下,有内存增暴增的隐患,还会降低redis的性能。–hotkeys
选项即可。但是该参数在执行的时候,如果key比较多,执行起来比较慢。5、自己抓包评估
Redis客户端使用TCP协议与服务端进行交互,通信协议采用的是RESP
。自己写程序监听端口,按照RESP协议规则解析数据,进行分析。缺点就是开发成本高,维护困难,有丢包可能性。
以上五种方案,各有优缺点。根据自己业务场景进行抉择即可。
1、利用二级缓存
比如利用ehcache
、spring cache
,甚至是一个HashMap
都可以。在你发现热key以后,把热key加载到系统的JVM中。
针对这种热key请求,会直接从jvm中取,而不会走到redis层。
假设此时有十万个针对同一个key的请求过来,如果没有本地缓存,这十万个请求就直接怼到同一台redis上了。
现在假设,你的应用层有50台机器,OK,你也有jvm缓存了。这十万个请求平均分散开来,每个机器有2000个请求,会从JVM中取到value值,然后返回数据。避免了十万个请求怼到同一台redis上的情形。
2、读写分离
读写分离就是将同为 Write
的请求发送到 Master
模块内,而将 Read
的请求发送至 ReadOnly
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
hinzu. Dürfen. Wenn dieser Parameter jedoch ausgeführt wird und viele Schlüssel vorhanden sind, ist die Ausführung langsamer. 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.
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. 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!