Maison  >  Article  >  base de données  >  Analyse détaillée de la structure des données et des opérations de données de Redis

Analyse détaillée de la structure des données et des opérations de données de Redis

coldplay.xixi
coldplay.xixiavant
2021-02-08 16:20:072217parcourir

Analyse détaillée de la structure des données et des opérations de données de Redis

Recommandé (gratuit) : redis

Redis peut effectuer des opérations de données au niveau de la microseconde. Redis peut exister. deux raisons principales pour des performances aussi exceptionnelles :

  • Redis est une base de données en mémoire, toutes les opérations sont effectuées en mémoire et la vitesse d'accès à la mémoire elle-même est très rapide
  • Redis Have ; types de données et structures de données efficaces.

Afin d'obtenir un accès rapide de la clé à la valeur, Redis utilise une table de hachage pour stocker les paires clé-valeur. L'entrée dans le compartiment de hachage enregistre les pointeurs vers la clé et la valeur réelles. même si la valeur est Une collection peut également être trouvée via le pointeur de valeur.

Lorsqu'il y a de plus en plus de données dans la table de hachage, des conflits de hachage se produiront, c'est-à-dire que les valeurs de hachage de plusieurs clés peuvent correspondre au même compartiment de hachage. Redis utilise le hachage en chaîne pour résoudre les conflits de hachage, ce qui signifie que plusieurs éléments du même compartiment de hachage sont stockés dans une liste chaînée et que les éléments sont tour à tour liés par des pointeurs.

S'il y a de plus en plus de conflits de hachage, la chaîne de conflits de hachage sera trop longue, ce qui entraînera une longue période et une faible efficacité dans la recherche d'éléments. Afin de résoudre ce problème, Redis rehachera la table de hachage pour stocker plusieurs éléments d'entrée de manière dispersée, réduisant ainsi le nombre d'éléments dans un seul compartiment de hachage, réduisant ainsi les conflits dans un seul compartiment.

Redis utilise deux tables de hachage globales par défaut pour un rehachage efficace. La table de hachage 1 est utilisée par défaut au début, et la table de hachage 2 n'alloue pas d'espace. Lorsque les données continuent d'augmenter, redis effectue un rehachage. étapes suivantes :

  1. Allouer plus d'espace à la table de hachage 2
  2. Copiez les données de la table de hachage 1 dans la table de hachage 2
  3. Libérez la table de hachage 1, l'espace est réservé pour la prochaine extension de rehash

Cependant, si une grande quantité de données est copiée en même temps à l'étape 2, le thread Redis peut être bloqué et incapable de répondre à d'autres requêtes, donc Redis adopte un Rehash progressif signifie que chaque fois qu'une requête est traitée, toutes les entrées à cette position d'index sont copiées.

Pour la valeur de type String, vous pouvez effectuer directement des opérations CRUD en recherchant le bucket de hachage. Pour les collections, après avoir trouvé le bucket de hachage correspondant via la table de hachage globale, dans la collection, effectuez ensuite CRUD. L'efficacité opérationnelle d'une collection est liée à la structure des données sous-jacentes et à la complexité des opérations.

  1. L'opération sur un seul élément est la base, et la complexité de l'opération est O(1)
    • Hash : HGET, HSET, HDEL ; 🎜>
    • Définissez le type SADD, SREM, SRANDMEMBER, etc.
  2. Les opérations de plage prennent beaucoup de temps et la complexité des opérations est O(N).
    • Hash : HGETALL;
    • Ensemble : SMEMBERS;
    • Liste : LRANGE
    • ZSet : ZRANGE
  3. Les opérations statistiques sont généralement efficaces, avec une complexité opérationnelle O(1).
  4. Il n'y a que quelques exceptions, et la complexité de l'opération est O(1).
    • Liste : LPOP, RPOP, LPUSH, RPUSH

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