Maison > Article > base de données > Comment la clé de hotspot est-elle générée dans Redis ? Comment le résoudre ?
L'article suivant vous amènera à comprendre les clés de point d'accès dans Redis, à présenter les raisons de la génération de clés de point d'accès, les moyens de découvrir les clés de point d'accès et les solutions aux clés de point d'accès. J'espère qu'il sera utile à tout le monde !
1. Les données consommées par les utilisateurs sont bien supérieures aux données produites
Le problème des raccourcis clavier est qu'il y a un grand nombre de demandes d'accès une clé fixe sur Redis à un certain moment, provoquant une panne du cache et des requêtes atteignant la base de données, submergeant le service de cache et le service de base de données, affectant ainsi la disponibilité des services d'application. [Recommandations associées : Tutoriel vidéo Redis]
Les plus courantes sont les recherches populaires sur Weibo, telles que XX mariage/tricherie de célébrités. Ensuite, la clé sur l'étoile XX augmentera instantanément et des problèmes de données chaudes se produiront. Weibo plante également de temps en temps.
De même, les actualités brûlantes, les commentaires brûlants, les émissions en direct de célébrités, etc. qui sont largement publiées et visionnées, ces scénarios typiques consistant à lire plus et à écrire moins provoqueront également des problèmes brûlants.
2. La fragmentation des requêtes est concentrée et dépasse la limite de performances d'un seul serveur
Lorsque le serveur lit les données pour y accéder, les données sont souvent 分片
segmentées dans le processus. un certain serveur hôte. La clé correspondante est accédée lorsque l'accès dépasse la limite du serveur, des problèmes de raccourci clavier se produiront.
1 Le trafic est concentré et atteint la limite supérieure de la carte réseau physique.
Lorsque la demande d'une certaine clé de point d'accès dépasse la limite supérieure de la carte réseau de l'hôte sur un certain hôte, les autres services du serveur ne pourront pas continuer en raison d'une concentration excessive de trafic.
2. Il y a trop de demandes et le service de partage de cache est désactivé.
Si les hotspots sont trop concentrés et que le cache des clés de hotspot est trop volumineux et dépasse la capacité actuelle du cache, le service de partitionnement du cache sera submergé.
3. Panne de DB, provoquant une avalanche d'affaires.
Lorsque le service de cache plante et qu'une autre requête est générée à ce moment-là, elle sera mise en cache sur la base de données en arrière-plan. En raison des faibles performances de la base de données elle-même, il est facile que la pénétration des requêtes se produise face à des requêtes volumineuses. ce qui entraînera en outre un phénomène d'avalanche et affectera sérieusement les performances de l'équipement.
1 Sur la base de l'expérience professionnelle, estimez quelles touches sont chaudes
En fait, cette méthode est tout à fait réalisable. Par exemple, si un produit est en vente flash, la clé de ce produit peut être considérée comme une touche de raccourci. L’inconvénient est évident. Toutes les entreprises ne peuvent pas estimer quelles touches sont des raccourcis clavier.
2. Collecter côté client
Cette méthode consiste à ajouter une ligne de code pour les statistiques de données avant d'utiliser Redis. Il existe de nombreuses façons de collecter des données, et cela peut également consister à envoyer un message de notification à un système de communication externe. L'inconvénient est que cela provoque une intrusion dans le code client.
3. Collecte au niveau Proxy
Certaines architectures de cluster sont les suivantes, le proxy peut être Twemproxy
, est l'entrée unifiée. La collecte et la création de rapports peuvent être effectuées au niveau de la couche proxy, mais l'inconvénient est évident. Toutes les architectures de cluster Redis n'ont pas de proxy. 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
. Cependant, dans des conditions de concurrence élevée, cette commande présente le danger caché d'une augmentation soudaine de la mémoire et réduira également les performances de Redis. –hotkeys
. Peut. Cependant, lorsque ce paramètre est exécuté, s'il y a beaucoup de clés, l'exécution sera plus lente. RESP
. Écrivez votre propre programme pour écouter le port, analyser les données conformément aux règles du protocole RESP et effectuer une analyse. Les inconvénients sont des coûts de développement élevés, une maintenance difficile et la possibilité de perte de paquets.
ehcache
, spring cache
ou même un HashMap
. Après avoir découvert la touche de raccourci, chargez-la dans la JVM du système. 🎜🎜Pour ce type de demande de raccourci clavier, elle sera récupérée directement depuis la jvm sans passer par la couche redis. 🎜🎜Supposons qu'il y ait 100 000 requêtes pour la même clé à ce moment-là. S'il n'y a pas de cache local, ces 100 000 requêtes seront directement envoyées au même redis. Écriture<.> est envoyé au module <code>Master
, et la requête Read
est envoyée au module ReadOnly
. 🎜🎜Les nœuds en lecture seule du module peuvent être étendus davantage et cette clé peut être stockée dans plusieurs Redis. Lorsqu'une demande de raccourci clavier arrive, nous sélectionnons au hasard un serveur Redis avec sauvegarde, accédons à la valeur et renvoyons les données. Cela résout efficacement le problème de la lecture à chaud. 🎜🎜La séparation de la lecture et de l'écriture présente également les avantages d'une extension flexible des capacités de lecture du point d'accès, de la possibilité de stocker un grand nombre de clés de point d'accès et de la convivialité pour le client. 🎜🎜Pour plus de connaissances sur la programmation, veuillez visiter : 🎜Vidéos de programmation🎜 ! ! 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!