当前位置:网站首页>Redis - grande question clé
Redis - grande question clé
2022-07-02 06:24:00 【Seven Sea Healthy Man】
L'article précédent parlait deRedisLes points chauds dekeyQuestions,Cet article présenteRedisGrandKeyLa notion de problème,GrandKeyLa cause du problème、Grand danger et solutionKeyL'idée du problème;
1. Qu'est - ce quekey?Quelle taillekey?
En fait,"Grandkey"Ce nom,Il y a un malentendu,Le soi - disant grandkeyLe problème, c'est quekeyDevaluePlus gros.,Donc C'est essentiellement grandvalueQuestions;C'est bien,keySouvent fixe,Généralement basé surkeyPréfixe et attributs d'entreprise sont assemblés,EtvalueSouvent, ce n'est pas fixe,Modifié pendant l'exécution du service,Il est donc possible quevalueDevenir grand;
Imaginez un scénario,Musique en ligneAPPMoyenne,Une liste de chansons a de nombreuses collections d'utilisateurs,S'il y a une telle structure de données:
- La relation de cartographie entre la liste de chansons et l'utilisateur estredisStockage;
- redisDekeyC'est une liste de chansons.ID,Longueur contrôlable et petite;
- redisDevalueC'est ça.List,ListContient les utilisateurs qui suivent la liste de chansonsID;
- Les utilisateurs peuvent être nombreux,SikeyPour stocker tous les utilisateurs qui suivent la liste de chansonsID,Peut conduire àListLa longueur devient incontrôlable;
Je vois ce que c'est. keyLa question est!
Quel âge as - tu? value Je crois que c'est grand. keyEt alors??
Redis Il existe plusieurs structures de données communes , Chaque structure est plus grande keyDifférentes définitions,Habituellement avecKeyTaille etKey Le nombre de membres est déterminé globalement ,Par exemple:
- key Trop de données en soi :value- Oui.StringType,Value La taille des octets est supérieure à 10 KB;
- key Trop d'éléments de collection dans :value- Oui.ZSET、Hash、List、SetLorsque le type de collection est égal, Il compte plus de 1w- Oui.;
- Key Trop de données pour le membre dans :UnHashTypeKey,Son nombre de membres, bien que seulement1,000Mais ces membresValue(Valeur)La taille totale est100 MB
La définition ci - dessus n'est pas absolue ,Principalement basé survalue Nombre de membres et value Nombre d'octets pour déterminer , Les entreprises peuvent également définir des critères en fonction de leurs propres scénarios ;
2. GrandkeyLes dangers?
Nous le savons tous.,Redis Une caractéristique typique de : Le fil de travail de base est un seul fil .
Le traitement des tâches demandées dans un seul thread est en série , Je ne peux pas finir devant. , Je ne peux pas gérer ça plus tard. , Il en résulte également des données de mémoire dans l'architecture distribuée et CPULe déséquilibre;Donc,RedisGrandekey Peut causer les problèmes suivants :
- Exécution key Le client de la commande lui - même ,Augmentation significative du temps,Même le temps d'arrêt;
- RedisMémoire atteintemaxmemory Limite supérieure de la définition des paramètres , Cause un blocage opérationnel ou important KeyExpulsion, Même un débordement de mémoire (Out Of Memory).
- Exécution key Lors d'une opération de lecture ou de suppression connexe , Ça va être très occupé. Largeur de bandeEtCPU, Affecter d'autres clients sur le serveur ;
- Dans le cadre de l'architecture groupée,Grandkey Le stockage lui - même entraîne un déséquilibre des données fragmentées dans les systèmes distribués ,,CPU L'utilisation est également inégale , L'utilisation de la mémoire d'un fragment de données est beaucoup plus élevée que celle des autres , Impossible d'équilibrer les ressources de mémoire pour les partitions de données
- Grandkey Il fait parfois chaud. key, Opérations de lecture fréquentes ,La surface d'influence sera grande
- Exécution keyLors de la suppression,Dans la version basseredis Peut facilement causer un blocage prolongé de la bibliothèque principale , Cela peut entraîner une interruption de synchronisation ou un changement maître - esclave ;
Ça a l'air grand. key L'impact est encore évident ,Le plus typique est:Fil de blocage、Baisse de la concurrence、Cause client timeout、 Diminution du taux de réussite des services côté serveur ;
3. Grandkey Comment cela se produit généralement ?
Grandkey La conception de l'entreprise est souvent déraisonnable ,Pas prévuvaule Le problème de la croissance dynamique ;Cause bigkey Les causes des problèmes sont généralement :
- Utilisation dans des scénarios sans objet Redis,Facile à créerKeyDevalueTrop gros.,Si utiliséStringTypeKey Stockage de données binaires volumineuses ;
- Insuffisance de la planification et de la conception avant le lancement des activités ,Non, c'est vrai.Key Une répartition raisonnable des membres dans key Devenir petit key, De sorte que les individus Key Trop de membres dans ;
- La structure des données de la classe set a toujours été value Données du bouchon intérieur , Aucun mécanisme de suppression , Données invalides non nettoyées périodiquement , Par exemple HASHTypeKey Augmentation continue du nombre de membres ;
- UtiliserLISTTypeKey Erreur de Code du côté de la consommation d'entreprise de , Créer une correspondance Key Augmentation ou diminution du nombre de membres ;
4. Comment trouver Bigkey?
(1)Augmenter la mémoire&Flux& Surveillance des indicateurs tels que les délais
À cause de BigkeyDevalueC'est énorme., Le thread peut être bloqué lors de la lecture ,Voilà.RedisTotalQPSÇa va tomber., Et le temps d'arrêt du client augmente , La largeur de bande du réseau augmentera , Configurer ces alarmes nous permet de découvrir keyL'existence de;
(2)bigkeysLes ordres
Utiliserbigkeys Les commandes sont analysées de façon transversale RedisTous dans l'InstanceKey, Et renvoie les statistiques globales avec chaque type de données Top1GrandeKey;

(3)redis-rdb-tools
Redis-rdb-toolsC'est parPythonCompilation, Prise en charge de l'analyse personnalisée Redis RDB Outil open source pour les fichiers Snapshot ;Utiliserredis-rdb-tools Outil d'analyse hors ligne pour scanner RDBFichiers persistants, Bien que le temps réel soit un peu faible , Mais complètement hors ligne n'a aucun effet sur les performances ;
(4) Outils de visualisation intégrés
Basé sur certains nuages publics ou l'architecture interne de l'entreprise redis Il y a généralement des pages visuelles et des outils d'analyse , Pour nous aider à nous positionner key, Bien sûr, le bas de la page peut également être basé sur bigkeysOurdb Résultats de l'analyse hors ligne du fichier ;

5. Grande manipulation keyL'idée du problème?
Selon bigkey L'utilisation pratique peut être divisée en deux situations : Amovible et non amovible ; La solution est la suivante: :

(1)Supprimer/ Grand nettoyage key
Si vous trouvez quelque chose de grand key Pas chaud. keyJuste là.DB Utilisation de la requête moyenne ,Peut êtreRedisSupprimer dans;
- QuandRedisVersion supérieure à4.0Heure,Disponible enUNLINK La commande supprime en toute sécurité Big Key, La commande peut être non bloquée , Nettoyer progressivement les Key;
- QuandRedisVersion inférieure à4.0Heure, Évitez les commandes bloquées KEYS, C'est une recommandation pour adoption. SCAN Commande pour effectuer un balayage itératif incrémental key, Puis jugez pour supprimer ;

Redis UNLINK Commande similaire à DEL Les ordres, Indique la suppression d'un key,Si spécifié key N'existe pas, La commande est ignorée ;UNLINK Commande différente de DEL La commande est asynchrone , Donc ça ne bloque pas ;UNLINK La commande n'est pas bloquée pour supprimer , Suppression non bloquante en bref , Est de placer l'opération de suppression dans un autre thread pour le traitement ;
Redis Scan La commande est utilisée pour itérer les clés de base de données dans la base de données ;SCAN La commande est un Itérateur basé sur le curseur,Après chaque appel, Renvoie un nouveau curseur à l'utilisateur, L'utilisateur doit utiliser ce nouveau curseur comme SCAN Paramètres du curseur pour la commande, Pour poursuivre le processus itératif précédent;
Nettoyage périodique des données périmées
L'accumulation de grandes quantités de données périmées peut entraîner de grandes quantités KeyLa production de,Par exemple, dansHASH De grandes quantités de données sont constamment écrites par incréments dans le type de données, ignorant l'actualité des données ; Les données de défaillance peuvent être nettoyées par des tâches programmées ;En train de nettoyerHASHHeure des données,Adoption recommandéeHSCANCoordination des commandesHDEL Commande pour nettoyer les données invalides , Évitez de nettoyer de grandes quantités de données RedisBlocage;
(2) Compression et séparation key
a. Quandvaule- Oui.stringHeure, Difficile à séparer , Utiliser la sérialisation 、 L'algorithme de compression key Contrôle de la taille dans une plage raisonnable , Mais la sérialisation et la désérialisation entraînent plus de temps ;
b. Quandvalue- Oui.string, Il est encore grand après compression key, Le fractionnement est nécessaire ,Un grandkey Divisé en différentes parties , Enregistrer chaque section key,Utilisermultiget Attendre que l'opération réalise la lecture de la transaction .
c. Quandvalue- Oui.list/set/hashLorsque le type de collection est égal, Découpage en fonction de la taille estimée des données , Les différents éléments sont calculés et divisés en différentes tranches ;InRedisDans l'architecture des grappes, Split large Key Peut jouer un rôle important dans l'équilibre de la mémoire entre les tranches de données ;
(3)SurveillanceRedis Niveau de mémoire pour
Peut être réglé raisonnablement par le système de surveillance Redis Rappel du seuil d'alarme de mémoire ,Par exempleRedisUtilisation de la mémoire supérieure à70%、RedisLa mémoire de1 Taux de croissance supérieur à 20%Attendez.; Par ces moyens de surveillance , De nombreux problèmes peuvent être évités à l'avance ,Par exempleLIST La défaillance du programme de consommation du type de données a causé la correspondance Key Le nombre de listes de , Transformer l'alarme en avertissement pour éviter la défaillance ;
RÉFÉRENCES:
Découvrir et traiter RedisGrandeKeyEt la chaleurKey - Base de données Cloud Redis - Alicloud
C'est réglé.RedisGrandkeyQuestions, Ses collègues l'ont loué pour sa peau de vache
边栏推荐
- 一口气说出 6 种实现延时消息的方案
- ROS create workspace
- Web components series (VIII) -- custom component style settings
- 网络相关知识(硬件工程师)
- When requesting resttemplate, set the request header, request parameters, and request body.
- LeetCode 27. Removing Elements
- 代码技巧——Controller参数注解@RequestParam
- Cglib代理-代码增强测试
- CUDA中的函数执行空间说明符
- 穀歌出海創業加速器報名倒計時 3 天,創業人闖關指南提前收藏!
猜你喜欢

Singleton mode compilation

Introduce two automatic code generators to help improve work efficiency

深入学习JVM底层(五):类加载机制

Redis——大Key問題

LeetCode 90. Subset II
![Data science [viii]: SVD (I)](/img/cb/7bf066a656d49666985a865c3a1456.png)
Data science [viii]: SVD (I)

Reading classic literature -- Suma++

sudo提权

Don't use the new WP collection. Don't use WordPress collection without update

Contest3147 - game 38 of 2021 Freshmen's personal training match_ 1: Maximum palindromes
随机推荐
Hydration failed because the initial UI does not match what was rendered on the server. One of the reasons for the problem
I/o impressions from readers | prize collection winners list
一起学习SQL中各种join以及它们的区别
Let every developer use machine learning technology
sudo提权
In depth understanding of JUC concurrency (I) what is JUC
Frequently asked questions about jetpack compose and material you
CUDA中的异步数据拷贝
深入学习JVM底层(二):HotSpot虚拟机对象
BGP中的状态机
Use of Arduino wire Library
Monitoring uplink of VRRP
稀疏数组(非线性结构)
Flutter hybrid development: develop a simple quick start framework | developers say · dtalk
The real definition of open source software
深入了解JUC并发(一)什么是JUC
谷歌出海创业加速器报名倒计时 3 天,创业人闯关指南提前收藏!
BGP routing optimization rules and notification principles
CUDA中的Warp Shuffle
Golang--map扩容机制(含源码)