Maison  >  Article  >  base de données  >  Comment résoudre le problème Big Key dans Redis

Comment résoudre le problème Big Key dans Redis

王林
王林avant
2023-05-27 14:41:483250parcourir

1. Qu'est-ce que Big Key ?

En termes simples, Big Key signifie que la valeur correspondant à une certaine clé est très grande et occupe une grande quantité d'espace Redis. La clé peut souvent être définie par le programme lui-même, et la valeur n'est souvent pas contrôlée par le programme, la valeur peut donc être très grande.

Les valeurs correspondant à ces Big Keys dans Redis sont très volumineuses et prennent beaucoup de temps dans le processus de sérialisation/désérialisation. Par conséquent, lorsque nous utilisons Big Key, cela prend généralement du temps, ce qui peut entraîner le blocage de Redis. . Réduisant ainsi les performances de Redis.

Utilisez plusieurs exemples pratiques pour décrire les caractéristiques des grandes Clés :

● Une Clé de type String, sa valeur est de 5 Mo (les données sont trop volumineuses)

● Une Clé de type Liste, son nombre de listes est de 20 000 ; (trop de listes) ;

● Une clé de type ZSet avec 10 000 membres (trop de membres) ;

● Une clé au format Hash avec seulement 1 000 membres mais la taille totale de la valeur de ces membres est de 100 Mo (la taille des membres est trop grande) ; );

Dans les affaires réelles, la détermination des clés volumineuses doit encore être jugée de manière globale en fonction des scénarios d'utilisation réels et des scénarios commerciaux de Redis. Elle est généralement jugée par la taille des données et le nombre de membres.

2. La scène où se produit Big Key ?

1. Une mauvaise utilisation de la structure de données Redis

L'utilisation de Redis dans des scénarios qui ne conviennent pas à ses capacités entraîne une valeur de clé trop grande, comme l'utilisation d'une clé de type chaîne pour stocker des données de fichiers binaires volumineux.

2. Échec du nettoyage des données indésirables à temps

En raison de l'incapacité de nettoyer régulièrement les données invalides, le nombre de membres dans la clé de type HASH continue d'augmenter. La valeur augmentera à l'infini car elle continuera uniquement à recevoir des données sans aucun mécanisme de suppression.

3. Estimations commerciales inexactes

Considération insuffisante dans la planification et la conception avant le lancement de l'entreprise, et les membres de la clé n'ont pas été raisonnablement répartis, ce qui a entraîné un trop grand nombre de membres dans les clés individuelles.

4. Liste des fans de célébrités et de célébrités Internet, et une liste de commentaires sur une certaine actualité brûlante

Supposons que nous utilisions la structure de données Liste pour enregistrer les fans d'une certaine célébrité/célébrité Internet, ou enregistrer le liste de commentaires sur les actualités brûlantes, car le nombre de fans Les actualités brûlantes auront beaucoup de taux de clics et de commentaires, il y aura donc beaucoup d'éléments stockés dans la collection Liste, ce qui peut entraîner une valeur trop élevée. grand, ce qui entraîne un problème Big Key.

3. Quels sont les dangers de Big Key ?

1. Blocage des requêtes

La valeur correspondant à Big Key est relativement grande Lorsque nous la lisons et l'écrivons, cela prend beaucoup de temps, ce qui peut bloquer le traitement ultérieur des requêtes. Le thread principal de Redis est monothread, ce qui signifie que toutes les requêtes seront traitées en série. Si la requête précédente n'est pas terminée, la requête suivante ne sera pas traitée.

2. Augmentation de la mémoire

La mémoire consommée par la lecture de Big Key augmentera par rapport à la clé normale, si elle continue d'augmenter, cela peut provoquer un OOM (débordement de mémoire) ou atteindre la valeur maximale de réglage de la mémoire maximale de redis. Provoque le blocage de l'écriture ou l'expulsion de clés importantes.

3. Réseau bloqué

Lors de la lecture d'une valeur unique importante, elle occupera plus de bande passante de la carte réseau du serveur, se ralentira et pourra affecter d'autres instances ou applications Redis sur le serveur.

4. Impact sur la synchronisation maître-esclave et la commutation maître-esclave

La suppression d'une clé volumineuse entraînera un blocage prolongé de la bibliothèque principale et entraînera une interruption de synchronisation ou une commutation maître-esclave.

4. Comment identifier la Grande Clé ?

1. Utilisez l'identification de commande fournie avec redis

Par exemple, vous pouvez utiliser le client Redis officiel redis-cli plus le paramètre --bigkeys pour trouver les 5 types de données d'une certaine instance (String, hash, list, set, zset) de la clé maximale.
L'avantage est qu'il peut être scanné en ligne sans bloquer le service ; l'inconvénient est qu'il y a moins d'informations et que le contenu n'est pas assez précis.

2. Utilisez la commande debug object key

pour analyser la clé en fonction de l'objet entrant (le nom de la clé) et renvoyer une grande quantité de données. La valeur de serializedlength est la longueur sérialisée de la clé. Il convient de noter que la longueur sérialisée de la clé n'est pas égale à sa longueur réelle dans l'espace mémoire. De plus, l'objet de débogage est une commande de débogage coûteuse à exécuter et, lorsqu'elle est en cours d'exécution, d'autres requêtes entrent. Redis sera bloqué jusqu'à son exécution. Et seules les informations d’une seule clé peuvent être trouvées à la fois, ce n’est donc pas officiellement recommandé.

3. outil open source redis-rdb-tools

Cette méthode consiste à exécuter bgsave sur l'instance redis, qui déclenchera la sauvegarde instantanée de redis, générera le fichier de persistance rdb, puis analysera le fichier rdb vidé. Trouvez la grande clé.

L'avantage est que les informations clés obtenues sont détaillées, qu'il existe de nombreux paramètres facultatifs et qu'elles prennent en charge les exigences personnalisées. Les informations de résultat peuvent être sélectionnées au format json ou csv et le traitement ultérieur est pratique. L'inconvénient est qu'il nécessite une connexion hors ligne. opération et il faut beaucoup de temps pour obtenir les résultats.

5. Comment résoudre le problème de la Grande Clé ?

Pour résoudre le problème de la Big Key, il suffit de réduire la taille de la valeur correspondant à la clé, c'est-à-dire pour la structure de données String, de réduire la longueur de la chaîne stockée pour la List, Hash, Set, Et ZSet Structure de données réduisant l'ensemble Nombre d'éléments dans .

1. Divisez la grande clé

Divisez une grande clé en plusieurs petites clés telles que la valeur-clé, et assurez-vous que le nombre ou la taille de chaque clé se situe dans une plage raisonnable, puis stockez-la, en obtenant différentes clés ou en utilisant mget pour les obtenir par lots.

2. Nettoyez les grosses clés

Nettoyez les grosses clés dans Redis et supprimez ces données de Redis. Redis fournit la commande UNLINK depuis la version 4.0, qui peut nettoyer lentement et progressivement les clés entrantes de manière non bloquante. Grâce à UNLINK, vous pouvez supprimer en toute sécurité des clés volumineuses ou même des clés extra-larges.

3. Surveillez la mémoire de Redis, la bande passante du réseau, le délai d'attente et d'autres indicateurs

En surveillant le système et en définissant un seuil d'alarme de mémoire Redis raisonnable pour nous rappeler que des clés volumineuses peuvent être générées à ce moment-là, telles que : Mémoire Redis l'utilisation dépasse 70 %, le taux de croissance de la mémoire Redis dépasse 20 % en 1 heure, etc.

4. Nettoyez régulièrement les données invalides

L'accumulation d'une grande quantité de données invalides se produira si une certaine clé a écrit une grande quantité de données de manière incrémentielle, mais que l'actualité des données a été ignorée. Les données invalides peuvent être nettoyées via des tâches planifiées.

5. Compresser la valeur

Utilisez des algorithmes de sérialisation et de compression pour contrôler la taille de la clé, mais il convient de noter que la sérialisation et la désérialisation entraîneront une certaine consommation de performances. Si la valeur est toujours très grande après compression, vous pouvez envisager de diviser davantage la clé.

Connaissances supplémentaires : conception des clés

(1) [Recommandation] : Lisibilité et gérabilité

Préfixez le nom de l'entreprise (ou le nom de la base de données) (pour éviter les conflits de clés) et séparez-le par deux points, comme le nom de l'entreprise : Nom de la table : id
o2o : order:1

(2) [Suggestion] : Simplicité

Contrôler la longueur de la clé tout en garantissant la sémantique Lorsqu'il y a beaucoup de clés, l'utilisation de la mémoire ne peut pas être ignorée, par exemple :
user:{uid}:friends:messages:{mid} est simplifié en u:{uid}m:{mid}

(3) [Obligatoire] : Ne pas inclure de caractères spéciaux

Contre-exemple : inclure des espaces , nouvelles lignes, caractères simples Guillemets doubles et autres caractères d'échappement

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer