Maison > base de données > Redis > le corps du texte

Comment la clé de hotspot est-elle générée dans Redis ? Comment le résoudre ?

青灯夜游
Libérer: 2021-09-22 20:18:19
avant
4787 Les gens l'ont consulté

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 !

Comment la clé de hotspot est-elle générée dans Redis ? Comment le résoudre ?

Les raisons de la génération de raccourcis clavier

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.

Dangers liés aux problèmes de touches de raccourci

Comment la clé de hotspot est-elle générée dans Redis ? Comment le résoudre ?

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.

Découverte des touches de raccourci

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

client
proxy
redis1
redis2
redis3

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自带命令

  • 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. Utilisez la commande intégrée de redis

  • commande de surveillance strong> : Cette commande peut capturer les commandes reçues par le serveur Redis en temps réel, puis écrire du code pour compter les raccourcis clavier. Bien entendu, il existe également des outils d'analyse prêts à l'emploi que vous pouvez utiliser, tels que 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.
  • paramètre hotkeys : redis 4.0.3 fournit la fonction de découverte de raccourcis clavier de redis-cli Lors de l'exécution de redis-cli, ajoutez l'option –hotkeys. Peut. Cependant, lorsque ce paramètre est exécuté, s'il y a beaucoup de clés, l'exécution sera plus lente.
5. Capturez et évaluez vos propres paquets

Le client Redis utilise le protocole et le serveur TCP. Pour l'interaction, le protocole de communication utilise 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.

Les cinq options ci-dessus ont chacune leurs propres avantages et inconvénients. Prenez simplement une décision en fonction de votre scénario commercial.

Solution pour la clé de point d'accès

1. cache🎜🎜Par exemple, utilisez 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.
Supposons maintenant que votre couche d'application comporte 50 machines. OK, vous disposez également d'un cache JVM. Ces 100 000 requêtes sont réparties uniformément, et chaque machine dispose de 2 000 requêtes. La valeur sera obtenue de la JVM puis les données seront renvoyées. Cela évite la situation où des centaines de milliers de requêtes sont envoyées au même redis. 🎜🎜2. Séparation en lecture et en écriture🎜🎜La séparation en lecture et en écriture consiste à séparer les requêtes qui sont toutes deux É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!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!