Méthode d'implémentation : 1. Chaque structure de données a sa propre implémentation de codage interne sous-jacente, et il existe plusieurs implémentations, de sorte que Redis choisira le codage interne approprié dans le scénario approprié 2. Chaque structure de données a plus de deux types de codage interne ; mise en œuvre ; 3. Le codage interne peut être utilisé comme mise en œuvre interne d’une variété de structures de données externes.
L'environnement d'exploitation de ce tutoriel : système Windows 7, Redis version 5.0.10, ordinateur DELL G3.
Redis a cinq structures de données de base : chaîne, hachage, ensemble, zset et liste. Ce qui suit explique comment la couche inférieure les implémente lors du téléchargement de la version Redis 3.0.6.
Pour résumer
(1) Chaque structure de données a sa propre implémentation de codage interne sous-jacente, et il existe plusieurs implémentations, de sorte que Redis choisira le codage interne approprié dans le scénario approprié.
(2) Vous pouvez voir que chaque structure de données a plus de deux implémentations d'encodage internes. Par exemple, la structure de données de chaîne comprend trois encodages internes : raw, int et embstr.
(3) Dans le même temps, certains encodages internes peuvent être utilisés comme implémentations internes de diverses structures de données externes. Par exemple, ziplist est un encodage interne commun au hachage, à la liste et au zset.
Dynamic String SDS
SDS est l'abréviation de "simple chaîne dynamique". Les chaînes qui apparaissent dans tous les scénarios dans Redis sont essentiellement implémentées par SDS :
Toutes les clés non numériques, telles que : key msg in set msg "hello"
La valeur du type de données chaîne, par exemple : valeur "hello" dans set msg "hello"
"string value" dans les types de données non-chaîne, tels que : "apple" "banana" dans rpush fruits "apple" "banana"
SDS ressemble à ceci :
free : combien d'espace reste-t-il ?
len : longueur de la chaîne
buf : tableau de caractères stocké
Pré-allocation d'espace
Pour réduire la surcharge de mémoire liée à la modification de l'agent de chaîne Comme pour le nombre d'allocations, SDS adopte la stratégie de "gestion unique":
Si la longueur du SDS est
Si la longueur du SDS est >= 1 Mo après modification, l'extension répondra non seulement à la longueur modifiée, mais disposera également d'un espace supplémentaire de 1 Mo.
Libération d'espace paresseuse
Afin d'éviter les opérations de réallocation de mémoire lors du raccourcissement de chaînes, SDS ne libère pas d'espace immédiatement lorsque les données sont réduites.
int
sont toutes sortes de nombres stockés dans Redis, y compris l'ajout délibéré de ""
set game "111"
Liste chaînée double
Listes chaînées doubles telles que lpush, rpush, lpop, rpop
ressemble à ceci :
est divisé en deux parties :
head : pointe vers la tête d'une liste spécifique doublement chaînée
tail : pointe vers la queue d'une liste doublement chaînée spécifique
len : la longueur de la liste doublement chaînée
a le prédécesseur pré et le successeur suivant
La liste doublement chaînée se compose de deux structures de données : list et listNode.
Recommandations de didacticiels associées : Tutoriel 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!