L'une des raisons des hautes performances de Redis est que chacune de ses structures de données est spécialement conçue et prise en charge par une ou plusieurs structures de données, en s'appuyant sur celles-ci Structures de données flexibles pour améliorer les performances de lecture et d’écriture. La structure des données de Redis peut être discutée sous deux angles différents
Le premier niveau est du point de vue de l'utilisateur. Ce niveau est également l'interface d'appel que Redis expose à l'extérieur, telle que : string, list, hash, set , ensemble trié.
Le deuxième niveau est du point de vue de l'implémentation interne, qui est une implémentation de niveau inférieur, telle que : dict, sds, ziplist, quicklist, skiplist, intset.
Du point de vue des utilisateurs Redis, un nœud Redis contient plusieurs bases de données (la valeur par défaut est 16 en mode non cluster et ne peut être que 1 en mode cluster) et une base de données maintient la relation de mappage de l’espace clé à l’espace objet. La clé de cette relation de mappage est le type de chaîne, et la valeur peut être une variété de types de données, tels que : chaîne, liste, hachage, ensemble, ensemble trié, etc. Le type de clé est toujours une chaîne, mais la valeur peut être de plusieurs types.
Du point de vue de l'implémentation interne de Redis, la relation de mappage au sein de la base de données est maintenue à l'aide d'un dict. Il suffit que la clé de dict soit exprimée dans une structure de données fixe, qui est une chaîne dynamique sds. La valeur est plus compliquée. Afin de stocker différents types de valeurs dans le même dict, une structure de données universelle est nécessaire. Cette structure de données universelle est robj, et son nom complet est redisObject.
Par exemple :typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; /* lru time (relative to server.lruclock) */ int refcount; void *ptr;} robj;
OBJ_HASH, qui correspondent respectivement aux 5 structures de données exposées par Redis
Le même type peut également correspondre à des encodages différents, ce qui signifie qu'un même type de données peut avoir des représentations internes différentes. Différentes représentations internes auront une utilisation de la mémoire et des performances de recherche différentes.
Lorsque type = OBJ_STRING, cela signifie que ce robj stocke une chaîne. À ce stade, l'encodage peut être l'un des trois types suivants :OBJ_ENCODING_QUICKLIST : exprimé sous forme de liste rapide. Utilisé pour les structures de données de liste.
Le rôle de redisObject est le suivant :
#🎜 🎜#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!