Daily Bo Shu Redis mémoire de hachage analyse de la structure du modèle

La Chine préoccupée par le nombre global OSC open source, obtenir les dernières informations techniques

contour

Renoncer à « Analyse de type chaîne Redis intra-codées » en cours d'analyse avait été Redis Le plus fondamental A l'intérieur du type de chaîne est comment coder et stocker, ce document décrit Redis utilisé à nouveau Le plus souvent Type de données: hachage (ou hachage), Redis est ainsi enregistrée en interne.

  • environnement source expérimentale: Redis 4.0.10

Remarque:  Cet article a paru dans Mon blog personnel , Bienvenue station

Cerveau cet article est la suivante:

Type de Hash des détails internes de codage

Pour Redis commun 5  Types de données (String, Hash, List, Set, ensemble triés), chaque type de données fournit Au moins deux types de  format de codage interne, et chaque type de données sélectionné le mode de codage intra Il est tout à fait transparente pour l'utilisateur , Redis sera plus optimisé de manière adaptative choisie en fonction du format d'une quantité de données codées intra-.

Si vous voulez regarder à l'intérieur du format encodage d'une clé, vous pouvez utiliser des instructions OBJECT CODER de KeyName pour mener à bien, tels que:

127.0.0.1:6379 >  

127.0.0.1:6379 >  set foo bar

bien

127.0.0.1:6379 >  

127.0.0.1:6379 >  objet encodage // foo Voir une valeur clé de codage Redis

"Embstr"

127.0.0.1:6379 >  

127.0.0.1:6379 >  

Hash pour le type le plus fréquemment utilisé du codage interne Il existe deux façons possibles:

  • OBJ_ENCODING_ZIPLIST (Liste d'emballage)
  • OBJ_ENCODING_HT (Table de hachage)

Redis base La quantité de données Situation à adaptatif Sélection de deux modes de codage Jiaoyou  Kind, et tout cela est tout à fait transparente pour l'utilisateur.

en Moins la saisie des données , Données de la valeur est faible  Redis utilisera le temps Liste d'emballage (OBJ_ENCODING_ZIPLIST) codage est stocké. Ici, les membres « petit », la valeur d'un membre d'un critère « petits » peut être configuré par des éléments de configuration:

hachage-max-ZipList-512 entrées

hash-max-ZipList valeur 64

Par défaut Par défaut Redis donné, bien sûr, le suivant configurable par l'utilisateur à la situation réelle.

Lorsque le nombre de types de champ Touche Dièse <  hachage-max-ZipList-entrées et longueur de chaque nom des champs et des valeurs de champ <  temps de hachage-max-valeur ZipList, la Redis OBJ_ENCODING_ZIPLIST utilise pour stocker la clé, sinon il sera converti en OBJ_ENCODING_HT de codage.

Il a dit la rumeur, nous voudra peut-être faire une expérience sentir:

Il est clair que lorsque la vérification expérimentale Une valeur de champ de longueur est supérieur à 64 , Le format encodage est commuté par le mode ZipList en mode Hashtable.

Avant le code source, le pas de secret, nous allons voir Redis sur la source de cette partie du commutateur pour atteindre, il aurait compris plus clairement:

Détaillé ci-dessous le modèle de stockage interne et OBJ_ENCODING_ZIPLIST OBJ_ENCODING_HT deux formats de codage, ils connaissent leurs propres caractéristiques et avantages et inconvénients, naturellement comprendre l'intention de les utiliser à l'intérieur Redis.

codage OBJ_ENCODING_ZIPLIST

Liste ZipList est un format de codage de compression compact, l'idée générale est Le temps pour l'espace , I.e. à la peine de performances partiellement écriture en échange d'une utilisation élevée de la mémoire, et donc ne seront utilisées que Un petit nombre de champs et Valeur du champ est plus petite  Scène.

Liste de compression des raisons d'utilisation de mémoire élevée pour sa fonction de mémoire continue est inséparable de ses structures typiques de mémoire peuvent être utilisés figure suivante montre vivement sur:

Par conséquent, si le type de hachage stockée ZipList Redis de mots, la disposition des éléments d'image devient schématique illustré ci-dessous: à savoir, la clé et la valeur sont mémoire logiquement contiguë:

OBJ_ENCODING_HT codage

OBJ_ENCODING_HT interne ce codage est la vraie structure de la table de hachage, ou une structure connue comme un dictionnaire, qui peut être réalisé O (1) la complexité des opérations de lecture et d'écriture, et par conséquent, une grande efficacité.

A l'intérieur du Redis, fidèle au type de table de hachage OBJ_ENCODING_HT est une structure de données des couches sous-jacentes de bas imbriquées, les relations comme suit:

Cette relation que nous pouvons de la source section de définition de la table de hachage Redis de vue:

Expliquons ce que chaque partie:

  • A propos de noeud de hachage (dictEntry)

  • A propos de table de hachage (de dictht) et dictionnaire (dict)

  • A propos dictType

  • Les valeurs de hachage calculées comment Redis

calcul de hachage du code source Redis est la suivante:

Ceci est une définition de macro langage C, en fait, dans les coulisses prennent vraiment le pointeur de la fonction de calcul de la valeur Hash est la structure décrite ci-dessus dictType fonction de hachage.

Quel pointeur de fonction d'initialisation fonction de hachage lorsque la fonction réelle correspondant à une véritable est affectée une valeur de hachage calculée comme suit:

  • Comment accéder à l'indice valeur de l'indice calculé Redis

Calcul de l'indice valeur de hachage dépendant de valeurs calculées obtenu ci-dessus, comme suit:

Ceci, ainsi que Il a été des détails très remarquables : Le dictionnaire dict est toujours enregistré deux structure de la table de hachage ht , Ainsi que sa très pertinente opérations de REHASH Cet article explique dans la section suivante.

post-scriptum

En raison de la capacité limitée, des erreurs ou inappropriés, aussi s'il vous plaît critique, apprendre ensemble l'échange!

Blog Auteur: CodeSheep

Une colonne de blog quotidien, les articles techniques de qualité avec d'excellents blogueurs quotidien recommandé pour vous. Tout en se félicitant de la présentation de l'utilisateur, une fois que l'article est inclus dans le compte officiel, nous recommanderons oh à la maison et d'autres endroits. attention Open Source Chine OSC accès quotidien à pousser la qualité, cliquez sur " En savoir plus « Lire l'article original.

Il était beau! Ministère réseau officiel Meizu 15: écran non-plein avant + empreintes digitales + métal brossé
Précédent
statistiques d'utilisation: trois nouvelles montée subite du conseil d'administration dans le premier plus chaud de financement du trimestre radiées
Prochain
Apprenez à cultiver des légumes, la cuisson ne, la calligraphie ...... cette éducation gratuite collège communautaire aux résidents d'enseigner à apprendre
Stephen Chow, Teng Shen, Huang Bo sites sur stalle Nouvel An chinois, qui est le nouveau roi de la comédie? localisation précise jour de l'an
Daily Bo Shu Kubernetes v1.10.0 documentation d'installation de cluster
La principale différence entre l'exemple d'interprétation et python3 python2
MIX 2S exposition prix de revient de mil 3K +! Lei Jun a dit franchement: 845 Xiaolong vraiment cher
Vous êtes mes yeux: conducteur de train Xiangyang sur Harbin pour prendre soin des passagers aveugles entiers
L'apprentissage de la machine après un nombre N de la publicité des produits de luxe, Lexus avec AI a pris la première annonce | Technologie dit
l'inventaire de l'information Voyage hebdomadaire électrique: délimitation Pékin des essais de conduite automatique route
voiture de nuages matin | secrète Lyft soumettre le projet IPO pertinentes, les propriétaires de Tesla et de faire une grosse blague
Les notes de concert du Nouvel An publié! Hunan Satellite TV a remporté les cinq premières années de perte
Découvrez le premier parc AI du monde: Haidian Park est pas les seuls Baidu véhicules sans pilote
expérience utilisateur innovantes pour répondre aux points névralgiques de l'industrie! série Hirota P sagesse intelligente dans l'évaluation de l'expérience de contrôle