Table des matières
Abstract
Introduction au problème Big Key
Utilisez la commande BIGKEYS
Debug Object
Si nous trouvons la grande clé, nous devons l'analyser plus en détail. Nous pouvons utiliser la commande debug object key pour afficher les informations détaillées d'une clé, y compris la taille de la valeur de la clé, etc. À ce stade, vous pouvez « jeter un œil » à l’intérieur de Redis pour voir quelle clé est trop volumineuse.
Pour les types autres que le type String, la commande d'utilisation de la mémoire adopte la méthode d'échantillonnage. Par défaut, 5 éléments sont échantillonnés, le calcul est donc une valeur approximative. Nous pouvons également spécifier le nombre d'échantillons.
Big Key问题解决思路
分割大key
对象压缩
直接删除
Maison base de données Redis Quels sont les dépannages et les solutions pour BigKey dans Redis ?

Quels sont les dépannages et les solutions pour BigKey dans Redis ?

May 31, 2023 pm 03:59 PM
redis bigkey

Abstract

Redis est une base de données en mémoire avec de fortes performances, mais lors de l'utilisation, nous pouvons rencontrer des problèmes de Big Key Ce problème est Redis La valeur de. une certaine clé est trop grande, donc Le problème Big Key est essentiellement un problème de grande valeur, entraînant une baisse ou un crash des performances de Redis.

Introduction au problème Big Key

Dans Redis, chaque clé a une valeur correspondante Si la valeur d'une clé est trop grande, cela entraînera une diminution des performances de Redis. Ou un crash, qui est plus métaphysique que métaphysique, Parce que Redis doit charger toutes les grosses clés en mémoire, ce qui occupera beaucoup d'espace mémoire et réduira la vitesse de réponse de Redis. Ce problème est appelé le problème Big Key#. 🎜🎜#. Ne sous-estimez pas ce problème, cela peut transformer instantanément votre Redis en « tortue ». En raison de la nature monothread de Redis, l'utilisation de Big Key prend généralement du temps, ce qui signifie que la possibilité de bloquer Redis est plus grande, ce qui est plus important. entraînera le blocage du client ou provoquera un basculement, ce qui peut entraîner une « requête lente ».

De manière générale, les deux situations suivantes sont appelées grosses clés :

  • Clé de type chaîne correspondant à une valeur supérieure à 10 Mo.

  • Liste, set, hash, zset et autres types de collection, le nombre d'éléments de collection dépasse 5000.

Les critères ci-dessus pour juger Big Key ne sont pas les seuls, juste une norme approximative. Il faut évaluer en fonction du scénario d'application spécifique s'il s'agit d'une grande clé du développement commercial réel. Si le fonctionnement d'une certaine clé entraîne un ralentissement du temps de réponse à la demande, la clé peut être déterminée comme une grande clé.

Dans Redis, les grandes clés sont généralement causées par les raisons suivantes  :

    #🎜 🎜#Le la taille de l'objet après la sérialisation est trop grande
  • Conteneurs qui stockent de grandes quantités de données, telles que des ensembles, des listes, etc.
  • # 🎜🎜## 🎜🎜#Grandes structures de données, telles que bitmap, hyperloglog, etc.

  • Si ces grosses clés ne sont pas traitées à temps, elles consommeront progressivement le ressources mémoire du serveur Redis et éventuellement provoquer le crash de Redis.

  • Dépannage des problèmes de grande clé

Lorsque les performances de Redis diminuent fortement, cela est probablement dû à l'existence d'une grande clé. Lors du dépannage de gros problèmes de clé, vous pouvez envisager les méthodes suivantes :

Utilisez la commande BIGKEYS

La commande BIGKEYS fournie avec Redis peut interroger les informations de toutes les clés du fichier actuel. Redis. Effectuez une analyse statistique sur la taille des paires clé-valeur dans l'ensemble de la base de données, par exemple, comptez le nombre et la taille moyenne des paires clé-valeur pour chaque type de données. De plus, une fois cette commande exécutée, les informations du plus grand bigkey dans chaque type de données seront affichées. Pour le type String, la longueur en octets du plus grand bigkey sera affichée. Pour le type de collection, le nombre d'éléments du. la plus grande clé sera affichée.# 🎜🎜#

La commande BIGKEYS analysera toute la base de données. Cette commande elle-même bloquera Redis, trouvera toutes les grandes clés et les renverra au client dans. la forme d'une liste.

Le format de la commande est le suivant :

$ redis-cli --bigkeys
Copier après la connexion

L'exemple de retour est le suivant :

# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type.  You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).

[00.00%] Biggest string found so far 'a' with 3 bytes
[05.14%] Biggest list   found so far 'b' with 100004 items
[35.77%] Biggest string found so far 'c' with 6 bytes
[73.91%] Biggest hash   found so far 'd' with 3 fields

-------- summary -------

Sampled 506 keys in the keyspace!
Total key length in bytes is 3452 (avg len 6.82)

Biggest string found 'c' has 6 bytes
Biggest   list found 'b' has 100004 items
Biggest   hash found 'd' has 3 fields

504 strings with 1403 bytes (99.60% of keys, avg size 2.78)
1 lists with 100004 items (00.20% of keys, avg size 100004.00)
0 sets with 0 members (00.00% of keys, avg size 0.00)
1 hashs with 3 fields (00.20% of keys, avg size 3.00)
0 zsets with 0 members (00.00% of keys, avg size 0.00)
Copier après la connexion
BIGKEYS命令会扫描整个数据库,这个命令本身会阻塞Redis,找出所有的大键,并将其以一个列表的形式返回给客户端。

命令格式如下:

redis 127.0.0.1:6379> DEBUG OBJECT key
Value at:0xb6838d20 refcount:1 encoding:raw serializedlength:9 lru:283790 lru_seconds_idle:150

redis 127.0.0.1:6379> DEBUG OBJECT key
(error) ERR no such key
Copier après la connexion

返回示例如下:

127.0.0.1:6379> set k1 value1
OK
127.0.0.1:6379> memory usage k1    //这里k1 value占用57字节内存
(integer) 57
127.0.0.1:6379> memory usage aaa  // aaa键不存在,返回nil.
(nil)
Copier après la connexion

需要注意的是,由于BIGKEYS命令需要扫描整个数据库,所以它可能会对Redis实例造成一定的负担。在执行这个命令之前,请确保您的Redis实例有足够的资源来处理它,建议在从节点执行

Debug Object

如果我们找到了Big Key,就需要对其进行进一步的分析。我们可以使用命令debug object keyIl est à noter que car le La commande BIGKEYS nécessite d'analyser l'intégralité de la base de données, elle peut donc imposer une certaine charge à l'instance Redis.

Avant d'exécuter cette commande, veuillez vous assurer que votre instance Redis dispose de suffisamment de ressources pour la gérer. Il est recommandé d'exécuter

sur le nœud esclave.

Debug Object

Si nous trouvons la grande clé, nous devons l'analyser plus en détail. Nous pouvons utiliser la commande debug object key pour afficher les informations détaillées d'une clé, y compris la taille de la valeur de la clé, etc. À ce stade, vous pouvez « jeter un œil » à l’intérieur de Redis pour voir quelle clé est trop volumineuse.

Lorsque la clé existe, la commande Debug Object fournit des informations sur la clé et est une commande de débogage. Lorsque la clé n'existe pas, une erreur est renvoyée.

127.0.0.1:6379> hlen hkey    // hkey有100w个字段,每个字段的value长度介于1~1024个字节
(integer) 1000000
127.0.0.1:6379> MEMORY usage hkey   //默认SAMPLES为5,分析hkey键内存占用521588753字节
(integer) 521588753
127.0.0.1:6379> MEMORY usage hkey SAMPLES  1000 //指定SAMPLES为1000,分析hkey键内存占用617977753字节
(integer) 617977753
127.0.0.1:6379> MEMORY usage hkey SAMPLES  10000 //指定SAMPLES为10000,分析hkey键内存占用624950853字节
(integer) 624950853
Copier après la connexion

serializedlength représente le nombre d'octets après sérialisation de la valeur correspondant à la clé

utilisation de la mémoire

Avant Redis 4.0, cela ne pouvait être effectué via DEBUG La commande OBJECT estime l'utilisation de la mémoire de la clé (champ sérialisélongueur), mais la commande DEBUG OBJECT contient des erreurs.

Pour la version 4.0 et supérieure, nous pouvons utiliser la commande memory usag.

La commande d'utilisation de la mémoire est très simple à utiliser, il suffit d'appuyer directement sur le nom de la clé d'utilisation de la mémoire ; si la clé actuelle existe, l'estimation réelle de l'utilisation de la mémoire de la valeur de la clé est renvoyée ; n'existe pas, nul est renvoyé.

pip install rdbtools
Copier après la connexion

Pour les types autres que le type String, la commande d'utilisation de la mémoire adopte la méthode d'échantillonnage. Par défaut, 5 éléments sont échantillonnés, le calcul est donc une valeur approximative. Nous pouvons également spécifier le nombre d'échantillons.

Exemple de description : Générez une clé de hachage de 1 million de champs : hkey La longueur de la valeur de chaque champ est une valeur aléatoire de 1 à 1024 octets.

rdb -c memory dump.rdb > memory.csv
Copier après la connexion

Pour obtenir une valeur de mémoire de clé plus précise, spécifiez un nombre d'échantillonnage plus grand. Cependant, plus le nombre d’échantillons est grand, plus le temps CPU est occupé.

redis-rdb-tools

redis-rdb-tools est un outil python pour analyser les fichiers rdb lors de l'analyse de la mémoire, nous l'utilisons principalement pour générer des instantanés de mémoire. Vous pouvez convertir le fichier d'instantané rdb en fichier CSV ou JSON et l'importer dans MySQL pour générer des rapports d'analyse.

#🎜🎜#Installer avec PYPI#🎜🎜#
CREATE TABLE `memory` (
     `database` int(128) DEFAULT NULL,
     `type` varchar(128) DEFAULT NULL,
     `KEY` varchar(128),
     `size_in_bytes` bigint(20) DEFAULT NULL,
     `encoding` varchar(128) DEFAULT NULL,
     `num_elements` bigint(20) DEFAULT NULL,
     `len_largest_element` varchar(128) DEFAULT NULL,
     PRIMARY KEY (`KEY`)
 );
Copier après la connexion
Copier après la connexion
#🎜🎜#Générer un instantané de mémoire#🎜🎜#
mysql> SELECT * FROM memory ORDER BY size_in_bytes DESC LIMIT 3;
+----------+------+-----+---------------+-----------+--------------+---------------------+
| database | type | key | size_in_bytes | encoding  | num_elements | len_largest_element |
+----------+------+-----+---------------+-----------+--------------+---------------------+
|        0 | set  | k1  |        624550 | hashtable |        50000 | 10                  |
|        0 | set  | k2  |        420191 | hashtable |        46000 | 10                  |
|        0 | set  | k3  |        325465 | hashtable |        38000 | 10                  |
+----------+------+-----+---------------+-----------+--------------+---------------------+
3 rows in set (0.12 sec)
Copier après la connexion
Copier après la connexion
#🎜🎜#Dans le fichier CSV généré, il y a les colonnes suivantes : #🎜🎜#
  • database key在Redis的db

  • type key类型

  • key key值

  • size_in_bytes key的内存大小

  • encoding value的存储编码形式

  • num_elements key中的value的个数

  • len_largest_element key中的value的长度

可以在MySQL中新建表然后导入进行分析,然后可以直接通过SQL语句进行查询分析。

CREATE TABLE `memory` (
     `database` int(128) DEFAULT NULL,
     `type` varchar(128) DEFAULT NULL,
     `KEY` varchar(128),
     `size_in_bytes` bigint(20) DEFAULT NULL,
     `encoding` varchar(128) DEFAULT NULL,
     `num_elements` bigint(20) DEFAULT NULL,
     `len_largest_element` varchar(128) DEFAULT NULL,
     PRIMARY KEY (`KEY`)
 );
Copier après la connexion
Copier après la connexion

例子:查询内存占用最高的3个 key

mysql> SELECT * FROM memory ORDER BY size_in_bytes DESC LIMIT 3;
+----------+------+-----+---------------+-----------+--------------+---------------------+
| database | type | key | size_in_bytes | encoding  | num_elements | len_largest_element |
+----------+------+-----+---------------+-----------+--------------+---------------------+
|        0 | set  | k1  |        624550 | hashtable |        50000 | 10                  |
|        0 | set  | k2  |        420191 | hashtable |        46000 | 10                  |
|        0 | set  | k3  |        325465 | hashtable |        38000 | 10                  |
+----------+------+-----+---------------+-----------+--------------+---------------------+
3 rows in set (0.12 sec)
Copier après la connexion
Copier après la connexion

Big Key问题解决思路

当发现存在大key问题时,我们需要及时采取措施来解决这个问题。下面列出几种可行的解决思路:

分割大key

将Big Key拆分成多个小的key。这个方法比较简单,但是需要修改应用程序的代码。虽然有些费力,但将一个大蛋糕切成小蛋糕可以解决问题。

或者尝试将Big Key转换成Redis的数据结构。例如,可以使用哈希表、列表或集合等数据结构将“Big Key”进行转换。

对象压缩

若大key的大小源于对象序列化后的体积巨大,我们可思考运用压缩算法来缩小对象的尺寸。Redis自身支持多种压缩算法,例如LZF、Snappy等。

直接删除

如果你所用的Redis版本是4.0或更高版本,你可以使用unlink命令进行异步删除。4.0以下的版本 可以考虑使用 scan ,分批次删除。

无论采用哪种方法,都需要注意以下几点:

  • 避免使用过大的value。如果需要存储大量的数据,可以将其拆分成多个小的value。就像是吃饭一样,一口一口的吃,不要贪多嚼不烂。

  • 避免使用不必要的数据结构。如果只需要保存一个字符串,应该避免使用像Hash或List这样的数据结构。

  • 定期清理过期的key。当Redis中存在大量过期的key时,会导致Redis性能下降。就像是家里的垃圾,需要定期清理。

  • 对象压缩

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

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.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

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)

Comment construire le mode Cluster Redis Comment construire le mode Cluster Redis Apr 10, 2025 pm 10:15 PM

Le mode Redis Cluster déploie les instances Redis sur plusieurs serveurs grâce à la rupture, à l'amélioration de l'évolutivité et de la disponibilité. Les étapes de construction sont les suivantes: Créez des instances de redis étranges avec différents ports; Créer 3 instances Sentinel, Moniteur Redis Instances et basculement; Configurer les fichiers de configuration Sentinel, ajouter des informations d'instance Redis de surveillance et des paramètres de basculement; Configurer les fichiers de configuration d'instance Redis, activer le mode de cluster et spécifier le chemin du fichier d'informations de cluster; Créer un fichier nœuds.conf, contenant des informations de chaque instance redis; Démarrez le cluster, exécutez la commande CREATE pour créer un cluster et spécifiez le nombre de répliques; Connectez-vous au cluster pour exécuter la commande d'informations de cluster pour vérifier l'état du cluster; faire

Comment implémenter le redis sous-jacent Comment implémenter le redis sous-jacent Apr 10, 2025 pm 07:21 PM

Redis utilise des tables de hachage pour stocker les données et prend en charge les structures de données telles que les chaînes, les listes, les tables de hachage, les collections et les collections ordonnées. Redis persiste les données via des instantanés (RDB) et ajoutez les mécanismes d'écriture uniquement (AOF). Redis utilise la réplication maître-esclave pour améliorer la disponibilité des données. Redis utilise une boucle d'événement unique pour gérer les connexions et les commandes pour assurer l'atomicité et la cohérence des données. Redis définit le temps d'expiration de la clé et utilise le mécanisme de suppression paresseux pour supprimer la clé d'expiration.

Comment la clé est-elle unique pour Redis Query Comment la clé est-elle unique pour Redis Query Apr 10, 2025 pm 07:03 PM

Redis utilise cinq stratégies pour assurer le caractère unique des clés: 1. Séparation des espaces de noms; 2. Structure de données de hachage; 3. Définir la structure des données; 4. Caractères spéciaux des touches de chaîne; 5. Vérification du script LUA. Le choix de stratégies spécifiques dépend de l'organisation des données, des performances et des exigences d'évolutivité.

Comment afficher toutes les clés dans Redis Comment afficher toutes les clés dans Redis Apr 10, 2025 pm 07:15 PM

Pour afficher toutes les touches dans Redis, il existe trois façons: utilisez la commande Keys pour retourner toutes les clés qui correspondent au modèle spécifié; Utilisez la commande SCAN pour itérer les touches et renvoyez un ensemble de clés; Utilisez la commande info pour obtenir le nombre total de clés.

Comment le cluster redis est-il implémenté Comment le cluster redis est-il implémenté Apr 10, 2025 pm 05:27 PM

Le cluster Redis est un modèle de déploiement distribué qui permet une expansion horizontale des instances Redis, et est implémentée via la communication inter-nœuds, l'espace clé de la division des emplacements de hachage, l'élection du nœud, la réplication maître-esclave et la redirection de commande: communication inter-nœuds: la communication du réseau virtuel est réalisée via le bus de cluster. Slot de hachage: divise l'espace clé en emplacements de hachage pour déterminer le nœud responsable de la clé. Élection du nœud: au moins trois nœuds maîtres sont nécessaires et un seul nœud maître actif est assuré par le mécanisme électoral. Réplication maître-esclave: le nœud maître est responsable de la rédaction de demandes, et le nœud esclave est responsable des demandes de lecture et de la réplication des données. Redirection de commande: le client se connecte au nœud responsable de la clé et le nœud redirige les demandes incorrectes. Dépannage: détection des défauts, marquer la ligne et re

Comment afficher le numéro de version de redis Comment afficher le numéro de version de redis Apr 10, 2025 pm 05:57 PM

Pour afficher le numéro de version redis, vous pouvez utiliser les trois méthodes suivantes: (1) Entrez la commande Info, (2) Démarrez le serveur avec l'option - Version et (3) afficher le fichier de configuration.

Que faire si redis-server ne peut être trouvé Que faire si redis-server ne peut être trouvé Apr 10, 2025 pm 06:54 PM

Étapes pour résoudre le problème que Redis-Server ne peut pas trouver: Vérifiez l'installation pour vous assurer que Redis est installé correctement; Définissez les variables d'environnement redis_host et redis_port; Démarrer le serveur Redis Redis-Server; Vérifiez si le serveur exécute Redis-Cli Ping.

Comment utiliser la ligne de commande redis Comment utiliser la ligne de commande redis Apr 10, 2025 pm 10:18 PM

Utilisez l'outil de ligne de commande redis (Redis-CLI) pour gérer et utiliser Redis via les étapes suivantes: Connectez-vous au serveur, spécifiez l'adresse et le port. Envoyez des commandes au serveur à l'aide du nom et des paramètres de commande. Utilisez la commande d'aide pour afficher les informations d'aide pour une commande spécifique. Utilisez la commande QUIT pour quitter l'outil de ligne de commande.

See all articles