国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Table des matières
Réponse?: " >Réponse?:
Qu'est-ce que le biais de données?? " >Qu'est-ce que le biais de données??
Quelles sont les raisons du biais des données?? " >Quelles sont les raisons du biais des données??
1. Il existe une grande clé" >1. Il existe une grande clé
2、HashTag 使用不當(dāng)" >2、HashTag 使用不當(dāng)
3. Répartition inégale des emplacements" >3. Répartition inégale des emplacements
Que sont les hotspots de cache?? " >Que sont les hotspots de cache??
1. Faites plusieurs copies " > 1. Faites plusieurs copies
2. Cache de mémoire locale " > 2. Cache de mémoire locale
Redis Cluster 為什么不用一致性Hash?" >Redis Cluster 為什么不用一致性Hash?
Maison Java JavaQuestions d'entretien Intervieweur?: Comment résoudre les biais de données Redis, les points chauds et d'autres problèmes

Intervieweur?: Comment résoudre les biais de données Redis, les points chauds et d'autres problèmes

Aug 15, 2023 pm 04:43 PM
java Questions d'interview Java

Redis, en tant que technologie grand public, a de nombreux scénarios d'application. De nombreux entretiens avec des usines de grande, moyenne et petite taille l'ont répertorié comme un contenu clé de l'inspection

Il y a quelques jours, alors qu'un ami de Planet étudiait, il l'a rencontré. les questions suivantes et suis venu consulter Tom

Considérant que ces problèmes sont relativement fréquents et souvent rencontrés au travail, je vais écrire un article pour les expliquer systématiquement

Description du problème:

Vous poser la question. : J'ai quelques questions lors de l'examen de Redis, veuillez y jeter un ?il?:

Si le cluster Redis présente des données asymétriques et une distribution inégale des données, comment le résoudre??

Lors du traitement du raccourci clavier, créez plusieurs copies de la clé, telles que k-1, k-2..., Comment faire en sorte que ces copies écrivent uniformément?? Comment accéder uniformément ?

redis utilise un emplacement de hachage pour maintenir le cluster. Semblable au hachage cohérent, une migration complète peut être évitée. Pourquoi ne pas simplement utiliser un hachage cohérent??

Réponse?:

En tant qu'accélérateur de performances, le cache distribué joue un r?le très important dans l'optimisation du système. Par rapport au cache local, bien qu'il ajoute une transmission réseau et prenne moins d'1 milliseconde, il présente l'avantage d'une gestion centralisée et prend en charge une très grande capacité de stockage.

Dans le domaine du cache distribué, Redis est actuellement largement utilisé. Ce framework est un stockage en mémoire pur, une exécution de commandes monothread, des structures de données sous-jacentes riches et une prise en charge du stockage de données et de la recherche dans plusieurs dimensions.

Bien s?r, avec une grande quantité de données, divers problèmes surviennent, tels que?: le biais de données, les points chauds de données, etc.

Qu'est-ce que le biais de données??

La configuration matérielle d'une seule machine a une limite supérieure. Généralement, nous utiliserons une architecture distribuée pour former un cluster de plusieurs machines. Le cluster dans l'image ci-dessous est composé de trois machines autonomes Redis. Le client transmet les demandes de lecture et d'écriture à des instances spécifiques via une certaine stratégie de routage.

En raison de la particularité des données métier, selon les règles de partitionnement spécifiées, les données sur différentes instances peuvent être inégalement réparties. Une grande quantité de données est concentrée sur un ou plusieurs n?uds de machine pour le calcul, ce qui entra?ne une charge importante. ces n?uds l'ont fait tandis que d'autres n?uds attendent inactifs, ce qui entra?ne une faible efficacité globale.

Intervieweur?: Comment résoudre les biais de données Redis, les points chauds et d'autres problèmes


Quelles sont les raisons du biais des données??

1. Il existe une grande clé

Par exemple, stocker une ou plusieurs données bigKey de type String prend beaucoup de mémoire.

Frère Tom a déjà étudié ce problème afin d'éviter des problèmes lors du développement, un collègue a utilisé le format JSON pour fusionner plusieurs données commerciales en une seule valeur et n'a associé qu'une seule clé. la paire a atteint des centaines de M.

La lecture et l'écriture fréquentes de clés volumineuses consomment de lourdes ressources mémoire et exercent une forte pression sur la transmission réseau, ce qui à son tour ralentit la réponse à la demande, déclenche un effet d'avalanche et finalement provoque diverses alarmes d'expiration du système.


Solution :

La méthode est très simple, utilisez <code style='font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border-width: 1px;border-style: solid;border-color: rgba(0, 0, 0, 0.08);border-radius: 2px;padding-right: 2px;padding-left: 2px;'><span style="font-size: 16px;">化整為零</span>的策略,將一個bigKey拆分為多個小key,獨立維護(hù),成本會降低很多。當(dāng)然這個拆也講究些原則,既要考慮業(yè)務(wù)場景也要考慮訪問場景,將關(guān)聯(lián)緊密的放到一起。

比如:有個RPC接口內(nèi)部對 Redis 有依賴,之前訪問一次就可以拿到全部數(shù)據(jù),拆分將要控制單值的大小,也要控制訪問的次數(shù),畢竟調(diào)用次數(shù)增多了,會拉大整體的接口響應(yīng)時間。

浙江的政府機(jī)構(gòu)都在提倡優(yōu)化流程,最多跑一次,都是一個道理。

Intervieweur?: Comment résoudre les biais de données Redis, les points chauds et d'autres problèmes


2、HashTag 使用不當(dāng)

Redis 采用單線程執(zhí)行命令,從而保證了原子性。當(dāng)采用集群部署后,為了解決mset、lua 腳本等對多key 批量操作,為了保證不同的 key 能路由到同一個 Redis 實例上,引入了 HashTag 機(jī)制。

用法也很簡單,使用<span style="font-size: 16px;">{}</span>le diviser en plusieurs partiesLa stratégie consiste à diviser une bigKey en plusieurs petites clés et à les maintenir indépendamment, ce qui réduira considérablement le co?t. Bien entendu, ce démontage tient également compte de certains principes. Il est nécessaire de considérer à la fois les scénarios commerciaux et les scénarios d'accès, et de les rapprocher.

Par exemple?: il existe une interface RPC qui a une dépendance interne à Redis. Auparavant, toutes les données pouvaient être obtenues en y accédant une fois. Le fractionnement contr?lerait la taille de la valeur unique et le nombre d'accès. , l'augmentation du nombre d'appels entra?nera un problème de temps de réponse global important de l'interface.

Les agences gouvernementales du Zhejiang préconisent l'optimisation du processus, et l'exécuter une fois au maximum est la même raison.

Intervieweur?: Comment résoudre les biais de données Redis, les points chauds et d'autres problèmes

2. Utilisation inappropriée de HashTag

????????Redis utilise un seul thread pour exécuter les commandes, garantissant ainsi atomicité. Lorsque le déploiement de cluster est adopté, afin de résoudre les opérations par lots multi-clés telles que les scripts mset et lua, et de garantir que différentes clés peuvent être acheminées vers la même instance Redis, Mécanisme HashTag ??. ????????L'utilisation est également très simple, utilisez ?? ?? {}????Accolades, spécifiez la clé pour calculer uniquement le hachage de la cha?ne entre les accolades, insérant ainsi des paires clé-valeur de clés différentes dans le même emplacement de hachage. ??????????Par exemple?: ????????
192.168.0.1:6380> CLUSTER KEYSLOT testtag
(integer) 764
192.168.0.1:6380> CLUSTER KEYSLOT {testtag}
(integer) 764
192.168.0.1:6380> CLUSTER KEYSLOT mykey1{testtag}
(integer) 764
192.168.0.1:6380> CLUSTER KEYSLOT mykey2{testtag}
(integer) 764
??????Vérifiez le code d'entreprise pour voir si HashTag est introduit et si trop de clés sont acheminées vers une seule instance. Considérez comment diviser en fonction de scénarios spécifiques. ????????Tout comme RocketMQ, dans de nombreux cas, nos besoins professionnels peuvent être satisfaits tant que les partitions sont maintenues en ordre. Dans la pratique, nous devons trouver ce point d’équilibre, plut?t que de résoudre les problèmes pour le simple plaisir de les résoudre. ????

3. Répartition inégale des emplacements

Si la méthode de déploiement Redis Cluster est adoptée, la base de données du cluster est divisée en 16384 emplacements (slots), et chaque clé de la base de données appartient à ces 16384 emplacements. , chaque n?ud du cluster peut gérer 0 ou un maximum de 16 384 emplacements.

Vous pouvez migrer manuellement un emplacement relativement grand vers une machine légèrement inactive pour garantir l'uniformité du stockage et de l'accès.


Que sont les hotspots de cache??

Le point d'accès du cache signifie que la plupart, voire toutes les demandes commerciales touchent les mêmes données mises en cache, ce qui exerce une pression énorme sur le serveur de cache et dépasse même la limite de charge d'une seule machine, provoquant une panne du serveur.


Solution?:

1. Faites plusieurs copies

Nous pouvons épeler des nombres séquentiels derrière la clé, tels que clé n°01, clé n°02. . . Plusieurs copies de la clé n°10, ces clés traitées sont situées sur plusieurs n?uds de cache.

Chaque fois que le client accède, il lui suffit de combiner un nombre aléatoire avec la limite supérieure du nombre de fragments en fonction de la clé d'origine et d'acheminer la demande vers des n?uds d'instance qui ne peuvent pas être acheminés.

Remarque?: Le cache définit généralement un délai d'expiration afin d'éviter une défaillance du cache centralisé, nous essayons de ne pas avoir le même délai d'expiration du cache. Nous pouvons ajouter un nombre aléatoire basé sur le préréglage.

Quant à l'uniformité du routage des données, elle est garantie par l'algorithme de Hash.


2. Cache de mémoire locale

Cache les données du hotspot dans la mémoire locale du client et définit un délai d'expiration. Pour chaque requête de lecture, il vérifiera d'abord si la donnée existe dans le cache local. Si elle existe, elle sera renvoyée directement. Si elle n'existe pas, elle accédera ensuite au serveur de cache distribué.

La mémoire cache locale "libère" complètement le serveur de cache et n'exerce aucune pression sur le serveur de cache.

Inconvénients?: Il est un peu difficile de détecter les dernières données mises en cache en temps réel, et des incohérences des données peuvent survenir. Nous pouvons définir un délai d'expiration relativement court et utiliser des mises à jour passives. Bien entendu, vous pouvez également utiliser un mécanisme de surveillance pour mettre à jour le cache local en temps opportun s'il détecte que les données ont changé.


Redis Cluster 為什么不用一致性Hash?

Redis Cluster 集群有16384個哈希槽,每個<code style='font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border-width: 1px;border-style: solid;border-color: rgba(0, 0, 0, 0.08);border-radius: 2px;padding-right: 2px;padding-left: 2px;'><span style="font-size: 16px;">key</span>通過<span style="font-size: 16px;">CRC16</span>校驗后對<span style="font-size: 16px;">16384</span>取模來決定放置哪個槽。集群的每個節(jié)點負(fù)責(zé)一部分hash槽,舉個例子,比如當(dāng)前集群有3個節(jié)點,那么 <span style="font-size: 16px;">node-1</span> 包含 0 到 5460 號哈希槽,<span style="font-size: 16px;">node-2</span> 包含 5461 到 10922 號哈希槽,<span style="font-size: 16px;">node-3</span>key

通過<p style="min-height: 24px;margin-bottom: 24px;">CRC16<br></p>Intervieweur?: Comment résoudre les biais de données Redis, les points chauds et d'autres problèmes校驗后對<p style="min-height: 24px;margin-bottom: 24px;">16384<br></p>取模來決定放置哪個槽。集群的每個節(jié)點負(fù)責(zé)一部分hash槽,舉個例子,比如

0 到 5460 號哈希槽,

<p style="min-height: 24px;margin-bottom: 24px;">node-2<span style="color: rgb(0, 0, 0);font-size: 16px;"></span></p> 包含 5461 到 10922 號哈希槽,<section data-tool="mdnice編輯器" data-website="https://www.mdnice.com" style='font-size: 16px;color: black;padding-right: 10px;padding-left: 10px;line-height: 1.6;letter-spacing: 0px;text-align: left;word-break: break-all;font-family: Optima-Regular, Optima, PingFangSC-regular, PingFangTC-regular, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;margin-bottom: 24px;'>node-3<blockquote data-tool="mdnice編輯器" style="border-top: none;border-right: none;border-bottom: none;font-size: 0.9em;overflow: auto;color: rgb(106, 115, 125);padding: 10px 10px 10px 20px;margin-bottom: 20px;margin-top: 20px;background: rgb(249, 249, 249);border-left-color: rgb(92, 157, 255);"></blockquote></section>

包含 ?到 16383 號哈希槽。

Intervieweur?: Comment résoudre les biais de données Redis, les points chauds et d'autres problèmes一致性哈希算法是1997年麻省理工學(xué)院的 Karger 等人提出了,為的就是解決分布式緩存的問題。


一致性哈希算法本質(zhì)上也是一種取模算法,不同于按服務(wù)器數(shù)量取模,一致性哈希是對固定值 2^32 取模。??????????公式 = hash(key) % 2^32????????????其取模的結(jié)果必是在 [0, 2 ^ 32-1]這個區(qū)間中的整數(shù),??從圓上映射的位置開始順時針方向找到的第一個節(jié)點即為存儲key的節(jié)點????????????????

L'algorithme de hachage cohérent atténue considérablement le problème de défaillance du cache causé par l'expansion ou le rétrécissement et n'affecte que le petit segment de clés dont ce n?ud est responsable. S'il n'y a pas beaucoup de machines dans le cluster et que le niveau de charge d'une seule machine est généralement très élevé, la pression provoquée par le temps d'arrêt d'un certain n?ud peut facilement déclencher un effet d'avalanche.


Par exemple?:

Le cluster Redis compte un total de 4 machines En supposant que les données soient réparties uniformément, chaque machine supporte un quart du trafic si une certaine machine arrive soudainement. se bloque, la machine suivante dans le sens des aiguilles d'une montre supportera le quart de trafic supplémentaire, et éventuellement la moitié du trafic, ce qui fait encore un peu peur.

Mais si vous utilisez <span style="font-size: 16px;">CRC16</span>CRC16 Après le calcul, combiné à la relation de liaison entre les slots et les instances, qu'il s'agisse d'une extension ou d'une réduction, seule la clé du n?ud correspondant doit être migrée en douceur, et la nouvelle relation de mappage de slot sera diffusée et stockée sans générant une invalidation du cache, une grande flexibilité.

De plus, s'il existe des différences dans les configurations des n?uds de serveur, nous pouvons personnaliser les numéros d'emplacement attribués aux différents n?uds et ajuster les capacités de charge des différents n?uds, ce qui est très pratique.

??

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!

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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276
Comment gérer les transactions en Java avec JDBC? Comment gérer les transactions en Java avec JDBC? Aug 02, 2025 pm 12:29 PM

Pour gérer correctement les transactions JDBC, vous devez d'abord désactiver le mode de validation automatique, puis effectuer plusieurs opérations, et enfin vous engager ou randonner en fonction des résultats; 1. Appelez Conn.SetAutoCommit (false) pour démarrer la transaction; 2. Exécuter plusieurs opérations SQL, telles que l'insertion et la mise à jour; 3. Appelez Conn.Commit () Si toutes les opérations sont réussies, et appelez Conn.Rollback () Si une exception se produit pour garantir la cohérence des données; Dans le même temps, les ressources TRY-With doivent être utilisées pour gérer les ressources, gérer correctement les exceptions et cl?turer les connexions pour éviter la fuite de connexion; De plus, il est recommandé d'utiliser des pools de connexion et de définir des points de sauvegarde pour réaliser un retour en arrière partiel, et de maintenir les transactions aussi courtes que possible pour améliorer les performances.

Comment travailler avec le calendrier à Java? Comment travailler avec le calendrier à Java? Aug 02, 2025 am 02:38 AM

Utilisez des classes dans le package Java.Time pour remplacer les anciennes classes de date et de calendrier; 2. Obtenez la date et l'heure actuelles via LocalDate, LocalDateTime et Localtime; 3. Créez une date et une heure spécifiques en utilisant la méthode OF (); 4. Utilisez la méthode plus / moins pour augmenter et diminuer le temps; 5. Utilisez ZonedDateTime et ZoneID pour traiter le fuseau horaire; 6. Format et cha?nes de date d'analyse via DateTimeFormatter; 7. Utilisez instantanément pour être compatible avec les anciens types de dates si nécessaire; Le traitement des dattes dans le Java moderne devrait donner la priorité à l'utilisation de Java.timeapi, qui fournit clairement, immuable et linéaire

Comparaison des frameworks Java: Spring Boot vs Quarkus vs MicronAut Comparaison des frameworks Java: Spring Boot vs Quarkus vs MicronAut Aug 04, 2025 pm 12:48 PM

Pré-formancetartuptimemoryusage, quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusofperforming lightbetterine scénarios.

Comprendre les ports du réseau et les pare-feu Comprendre les ports du réseau et les pare-feu Aug 01, 2025 am 06:40 AM

NetworkportsandfirewallsworkTogeTherToenable Communication whileSenSurringSecurity.1.networkportsAreVirtualEndpointsNumberred0–65535, Withwell-connuportslike80 (HTTP), 443 (HTTPS), 22 (SSH), et 25 (SMTP)

Comment fonctionne la collection Garbage en Java? Comment fonctionne la collection Garbage en Java? Aug 02, 2025 pm 01:55 PM

La collecte des ordures de Java (GC) est un mécanisme qui gère automatiquement la mémoire, ce qui réduit le risque de fuite de mémoire en récupérant des objets inaccessibles. 1. GC juge l'accessibilité de l'objet de l'objet racine (tel que les variables de pile, les threads actifs, les champs statiques, etc.), et les objets inaccessibles sont marqués comme des ordures. 2. Sur la base de l'algorithme de compensation de marque, marquez tous les objets accessibles et effacez des objets non marqués. 3. Adopter une stratégie de collecte générationnelle: la nouvelle génération (Eden, S0, S1) exécute fréquemment MinorGC; Les personnes agées fonctionnent moins, mais prend plus de temps pour effectuer MajorGC; Metaspace Stores Metadata de classe. 4. JVM fournit une variété de périphériques GC: SerialGC convient aux petites applications; Le parallelGC améliore le débit; CMS réduit

Utilisation de types HTML ?Entrée? pour les données utilisateur Utilisation de types HTML ?Entrée? pour les données utilisateur Aug 03, 2025 am 11:07 AM

Le choix du bon type HTMLinput peut améliorer la précision des données, améliorer l'expérience utilisateur et améliorer la convivialité. 1. Sélectionnez les types d'entrée correspondants en fonction du type de données, tels que le texte, le courrier électronique, le tel, le numéro et la date, qui peuvent vérifier automatiquement la somme de la somme et l'adaptation au clavier; 2. Utilisez HTML5 pour ajouter de nouveaux types tels que l'URL, la couleur, la plage et la recherche, qui peuvent fournir une méthode d'interaction plus intuitive; 3. Utilisez l'espace réservé et les attributs requis pour améliorer l'efficacité et la précision du remplissage des formulaires, mais il convient de noter que l'espace réservé ne peut pas remplacer l'étiquette.

Comparaison des outils de construction Java: Maven vs Gradle Comparaison des outils de construction Java: Maven vs Gradle Aug 03, 2025 pm 01:36 PM

GradleisthebetterChoiceFormostNewProjectsDuetOtsSuperiorflexibility, Performance et ModerNtoolingSupport.1.gradle’sgroovy / kotlindslismoreConcis

passer par l'exemple de déclaration de différence expliquée passer par l'exemple de déclaration de différence expliquée Aug 02, 2025 am 06:26 AM

Le report est utilisé pour effectuer des opérations spécifiées avant le retour de la fonction, telles que les ressources de nettoyage; Les paramètres sont évalués immédiatement lorsqu'ils sont reportés et les fonctions sont exécutées dans l'ordre de la dernière entrée (LIFO); 1. Plusieurs éleveurs sont exécutés dans l'ordre inverse des déclarations; 2. Communément utilisé pour le nettoyage sécurisé tel que la fermeture des fichiers; 3. La valeur de retour nommée peut être modifiée; 4. Il sera exécuté même si la panique se produit, adaptée à la récupération; 5. éviter l'abus de report dans les boucles pour éviter la fuite des ressources; Une utilisation correcte peut améliorer la sécurité et la lisibilité du code.

See all articles