Maison  >  Article  >  base de données  >  Parlons du type String dans la structure de données Redis

Parlons du type String dans la structure de données Redis

青灯夜游
青灯夜游avant
2021-12-08 09:52:491930parcourir

Cet article vous amènera à comprendre le type String dans la structure de données Redis et à parler de la structure de stockage KV de Redis. J'espère qu'il vous sera utile !

Parlons du type String dans la structure de données Redis

Redis est souvent utilisé comme cache KV distribué. Beaucoup de gens l'utilisent uniquement, mais ils ne savent pas qu'il y a de nombreux secrets inconnus en dessous. [Recommandations associées : Tutoriel vidéo Redis]

Type de chaîne

String est le type de données le plus basique pris en charge par Redis. Tout d'abord, examinons String, sa structure de données et son stockage.

Redéfinir SDS pour stocker String

Comme nous le savons tous, redis est écrit en langage C, et le langage C n'a pas de type String, seulement char[], et la taille doit être spécifiée lors de l'initialisation et ne peut pas être modifiée. Afin de réaliser des fonctions telles que l'ajout et l'expansion dynamiques, telles que la commande incr et la commande append, redis définit et maintient un SDS (Simple Dynamic String) pour implémenter ces fonctions.

Jetons d'abord un coup d'œil à la structure de données définie dans le code source de Redis. Il existe 5 types ici pour économiser de l'espace.

Parlons du type String dans la structure de données Redis

1. len : Pour obtenir la longueur de char[], vous devez parcourir le tableau. La complexité temporelle de len(char[]) est O(n) ; tapez en langage C, seuls char[]. Et char[] doivent d'abord allouer une longueur d'espace, char[] a une longueur pré-alloué et doit être développé une fois les données augmentées

3 : occupe toujours un octet ; . Les 3 bits les plus bas sont utilisés pour indiquer le type d'en-tête. Il existe 5 types d'en-têtes et il existe des définitions constantes dans sds.h.

4. buf[] : tableau de caractères en langage C, utilisez '

Structure de stockage KV de Redis

Dans Redis, tout le stockage est stocké sous la forme de paires clé-valeur KV. K est un type de chaîne, qui est SDS ; V peut être une chaîne, une liste, un hachage, etc. Structures de données prises en charge), V n'est pas directement défini sur un type spécifique, mais est encapsulé avec une couche de redisObject ; la structure de données réellement stockée est spécifiquement pointée par le pointeur ptr ;

Et, afin de mieux économiser de l'espace, redis stocke également les pointeurs ptr de différentes manières, d'une part, lorsqu'un entier de type Long est enregistré, le pointeur dans RedisObject est directement affecté aux données entières, donc aucun pointeur supplémentaire n'est nécessaire. . Il pointe à nouveau vers un entier, économisant ainsi l'espace occupé par les pointeurs. D'autre part, lorsque les données de chaîne sont enregistrées et que la chaîne est inférieure ou égale à 44 octets, les métadonnées, les pointeurs et les SDS dans RedisObject constituent une zone de mémoire continue, évitant ainsi la fragmentation de la mémoire. Cette méthode de mise en page est également appelée méthode de codage embstr. Bien sûr, lorsque la chaîne dépasse 44 octets, la quantité de données SDS commence à augmenter et Redis ne présente plus SDS et RedisObject ensemble, mais alloue un espace indépendant à SDS et utilise un pointeur pour pointer vers la structure SDS. Cette méthode de mise en page est appelée mode d'encodage brut. Comme le montre l'image

Parlons du type String dans la structure de données Redis

  • encodage embstr
    stocke des chaînes courtes, allocation de mémoire unique ;
    il est en lecture seule, si le contenu est modifié, il deviendra un encodage brut (même s'il ne dépasse pas 44 octets) ;
  • encodage brut
    peut allouer de l'espace mémoire plusieurs fois pour stocker de longues chaînes de plus de 44 octets.

raw Si la longueur des caractères SDS natifs est réduite à moins de 44, sera-t-elle inversée en codage embstr ?
Non ; l'encodage sous-jacent de Redis est irréversible après la conversion (pas de restauration).

Résumé

redis est un middleware de mise en cache couramment utilisé. Nous devons comprendre clairement sa structure de données et son stockage afin de pouvoir choisir une structure de données et une estimation de la mémoire plus appropriées lors de son utilisation.

Adresse de calcul de la mémoire redis http://www.redis.cn/redis_memory/

Pour plus de connaissances sur la programmation, veuillez visiter : Introduction à la programmation ! !

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