Maison > Article > base de données > Introduction aux méthodes d'optimisation de la mémoire Redis
1. Encodage spécial :
Depuis Redis 2.2, de nombreux types de données peuvent être optimisés pour l'espace de stockage grâce à un encodage spécial. Parmi eux, Hash, List et Sets composés d'Integer peuvent tous utiliser cette méthode pour optimiser la structure de stockage afin d'occuper moins d'espace. Dans certains cas, 9/10 de l'espace peut être économisé. (Recommandé : Tutoriel vidéo Redis)
Ces encodages spéciaux sont totalement transparents pour l'utilisation de Redis. En fait, il s'agit simplement d'une transaction entre le CPU et la mémoire. Si l'utilisation de la mémoire est plus élevée, davantage de CPU sera naturellement consommée lors de l'exploitation des données, et vice versa. Redis fournit un ensemble de paramètres de configuration pour définir divers seuils liés à un encodage spécial, tels que :
#如果Hash中字段的数量小于参数值,Redis将对该Key的Hash Value采用特殊编码。 hash-max-zipmap-entries 64 #如果Hash中各个字段的最大长度不超过512字节,Redis也将对该Key的Hash Value采用特殊编码方式。 hash-max-zipmap-value 512 #下面两个参数的含义基本等同于上面两个和Hash相关的参数,只是作用的对象类型为List。 list-max-ziplist-entries 512 list-max-ziplist-value 64 #如果set中整型元素的数量不超过512时,Redis将会采用该特殊编码。 set-max-intset-entries 512
Si une valeur qui a été codée dépasse la limite maximale dans les informations de configuration après avoir été modifiée, alors Redis le fera automatiquement. convertissez-le en un format d'encodage normal.Cette opération est très rapide.Cependant, si vous l'utilisez à l'envers et convertissez une grande valeur d'encodage normal en un encodage spécial, la suggestion de Redis est de le faire d'abord avant de le faire officiellement. il suffit de tester d'abord l'efficacité de la conversion, car de telles conversions sont souvent très inefficaces.
2. Opérations au niveau BIT et octet :
À partir de Redis 2.2, Redis fournit GETRANGE/SETRANGE/GETBIT/SETBIT pour la commande Key/Value de type chaîne. Grâce à ces commandes, nous pouvons accéder aux données de valeur de type String, tout comme les tableaux d'exploitation.
Par exemple, l'ID qui identifie de manière unique un utilisateur peut être simplement une sous-chaîne de la valeur String. De cette manière, il peut être facilement extrait via la commande GETRANGE/SETRANGE.
De plus, vous pouvez utiliser BITMAP pour représenter les informations de genre de l'utilisateur, telles que 1 pour un homme et 0 pour une femme. Lorsque vous utilisez cette méthode pour représenter les informations de genre de 100 000 000 d'utilisateurs, elle n'occupe que 12 Mo d'espace de stockage. Dans le même temps, le parcours des données via la commande SETBIT/GETBIT est également très efficace.
3. Utilisez le hachage autant que possible :
Étant donné que les petites données de type hachage prennent relativement peu de place, nous devrions envisager de les utiliser autant que possible dans les applications réelles. . Type de hachage, tel que les informations d'enregistrement de l'utilisateur, qui comprend des champs tels que le nom, le sexe, l'adresse e-mail, l'âge et le mot de passe.
Bien entendu, nous pouvons stocker ces informations sous forme de clé, et les informations renseignées par l'utilisateur sont stockées sous forme de valeur de chaîne. Cependant, Redis préfère le stocker sous forme de hachage, et les informations ci-dessus sont exprimées sous forme de champ/valeur.
Nous allons maintenant prouver davantage cette affirmation en apprenant le mécanisme de stockage de Redis. Le mécanisme de codage spécial a été mentionné au début de ce blog, et il existe deux paramètres de configuration liés au type de hachage : hash-max-zipmap-entries et hash-max-zipmap-value.
Quant à leur champ d’action, ils ont déjà été donnés, je n’entrerai donc pas dans les détails ici. Supposons maintenant que le nombre de champs stockés dans la valeur de hachage est inférieur à hash-max-zipmap-entries et que la longueur de chaque élément est également inférieure à hash-max-zipmap-value. De cette façon, chaque fois qu'il y a un nouveau stockage clé/valeur de type Hash, Redis créera un espace de longueur fixe pour la valeur de hachage. Le nombre maximum d'octets pré-alloués est :
total_bytes = hash-max-zipmap-entries * hash-max-zipmap-value
De cette façon, toutes les valeurs de hachage La position du champ a été réservée et le champ/valeur est accessible de manière aléatoire comme un tableau. L'intervalle entre eux est hash-max-zipmap-value.
Uniquement lorsque le nombre de champs dans la valeur de hachage ou la longueur d'un nouvel élément dépasse les deux valeurs de paramètres ci-dessus, Redis envisagera de les restaurer sous la forme d'une table de hachage, sinon elle restera toujours de cette façon. Une méthode de stockage et d’accès efficace.
De plus, puisque chaque clé doit stocker certaines informations système associées, telles que le délai d'expiration, le LRU, etc., par rapport à la clé/valeur de type chaîne, le type Hash réduit considérablement le nombre de clés (la plupart. les clés sont représentées et stockées sous forme de champs de hachage), optimisant ainsi davantage l'efficacité d'utilisation de l'espace de stockage.
Pour plus de connaissances sur Redis, veuillez faire attention à la colonne Tutoriel de base de données 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!