Maison base de données Redis 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

Feb 08, 2021 pm 04:20 PM
redis 数据操作 数据结构

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 de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Solution à l'erreur 0x80242008 lors de l'installation de Windows 11 10.0.22000.100 Solution à l'erreur 0x80242008 lors de l'installation de Windows 11 10.0.22000.100 May 08, 2024 pm 03:50 PM

Solution à l'erreur 0x80242008 lors de l'installation de Windows 11 10.0.22000.100

Analyser les goulots d'étranglement des fonctions PHP et améliorer l'efficacité de l'exécution Analyser les goulots d'étranglement des fonctions PHP et améliorer l'efficacité de l'exécution Apr 23, 2024 pm 03:42 PM

Analyser les goulots d'étranglement des fonctions PHP et améliorer l'efficacité de l'exécution

Stratégie de mise en cache et optimisation de l'API Golang Stratégie de mise en cache et optimisation de l'API Golang May 07, 2024 pm 02:12 PM

Stratégie de mise en cache et optimisation de l'API Golang

Mécanisme de mise en cache et pratique d'application dans le développement PHP Mécanisme de mise en cache et pratique d'application dans le développement PHP May 09, 2024 pm 01:30 PM

Mécanisme de mise en cache et pratique d'application dans le développement PHP

Comment utiliser le cache Redis dans la pagination des tableaux PHP ? Comment utiliser le cache Redis dans la pagination des tableaux PHP ? May 01, 2024 am 10:48 AM

Comment utiliser le cache Redis dans la pagination des tableaux PHP ?

Comment mettre à niveau Win11 anglais 21996 vers le chinois simplifié 22000_Comment mettre à niveau Win11 anglais 21996 vers le chinois simplifié 22000 Comment mettre à niveau Win11 anglais 21996 vers le chinois simplifié 22000_Comment mettre à niveau Win11 anglais 21996 vers le chinois simplifié 22000 May 08, 2024 pm 05:10 PM

Comment mettre à niveau Win11 anglais 21996 vers le chinois simplifié 22000_Comment mettre à niveau Win11 anglais 21996 vers le chinois simplifié 22000

Navicat peut-il se connecter à Redis ? Navicat peut-il se connecter à Redis ? Apr 23, 2024 pm 05:12 PM

Navicat peut-il se connecter à Redis ?

Structures de données et algorithmes Java : explication détaillée Structures de données et algorithmes Java : explication détaillée May 08, 2024 pm 10:12 PM

Structures de données et algorithmes Java : explication détaillée

See all articles