Maison > Article > base de données > Pourquoi le monothread Redis est-il rapide ?
La raison pour laquelle Redis s'exécute très rapidement dépend principalement des raisons suivantes :
(1) Fonctionnement en mémoire pure, évite les accès massifs à la base de données et réduit les lectures directes sur le disque données, redis stocke les données en mémoire. Lors de la lecture et de l'écriture des données, elles ne sont pas limitées par la vitesse d'E/S du disque dur, donc la vitesse est rapide
(2) Le fonctionnement à un seul thread évite les inutiles ; pas de changement de contexte ni de conditions de concurrence, et il n'y a pas de consommation de processeur due à la commutation causée par le multi-processus ou le multi-threading. Il n'est pas nécessaire de prendre en compte divers problèmes de verrouillage. Il n'y a pas d'opérations de verrouillage et de libération du verrou, et il n'y a pas de performances. consommation causée par d'éventuels blocages ;
(3) Un mécanisme de multiplexage d'E/S non bloquant est adopté
Principe de multiplexage :
Utilisateur Ajoutez d'abord le socket qui nécessite des opérations d'E/S à la sélection, puis bloquez et attendez le retour de l'appel système de sélection. Lorsque les données arrivent, le socket est activé et la fonction de sélection revient. Le thread utilisateur lance formellement une demande de lecture, lit les données et poursuit l'exécution. De cette façon, les utilisateurs peuvent enregistrer plusieurs sockets, puis appeler en continu select pour lire les sockets activés. Le serveur Redis place ensuite ces sockets dans la file d'attente. Ensuite, le répartiteur d'événements de fichier va à son tour dans la file d'attente et les transmet à différents traitements d'événements. dans le processeur pour améliorer l’efficacité de la lecture.
L'utilisation de la technologie de multiplexage d'E/S multicanal permet à un seul thread de gérer efficacement plusieurs demandes de connexion (minimisant la consommation de temps des E/S réseau utilisées par le modèle de multiplexage d'E/S multicanal). select , poll et epoll ont la capacité de surveiller les événements d'E/S de plusieurs flux en même temps. Lorsqu'il est inactif, le thread actuel sera bloqué. Lorsqu'un ou plusieurs flux ont des événements d'E/S, ils se réveilleront. état bloqué. , le programme interrogera donc tous les flux (epoll interroge uniquement les flux qui émettent réellement des événements) et traitera uniquement les flux prêts en séquence. Cette approche évite un grand nombre d'opérations inutiles, améliorant ainsi l'efficacité.
(4) Structures de données flexibles et diversifiées.
Redis utilise un objet redisObject en interne pour représenter toutes les clés et valeurs. Les informations principales de redisObject incluent le type de données, la méthode de codage, le pointeur de données, la mémoire virtuelle, etc. Il contient cinq types de données : chaîne, hachage, liste, ensemble et ensemble trié. Les types de données correspondants sont utilisés pour différents scénarios, ce qui réduit non seulement l'utilisation de la mémoire, mais enregistre également la transmission du trafic réseau.
(5) Persistance
Étant donné que les données Redis sont stockées en mémoire, si la persistance n'est pas configurée, toutes les données seront perdues après le redémarrage de Redis, la fonction de persistance de Redis doit donc être activée , enregistrez les données sur le disque et lorsque Redis est redémarré, les données peuvent être restaurées à partir du disque. Redis fournit deux méthodes de persistance, l'une est la persistance RDB (le principe est de vider régulièrement les enregistrements de base de données de Redis en mémoire vers la persistance RDB sur le disque), et l'autre est la persistance AOF (ajouter uniquement un fichier) (le principe est d'écrire le journal des opérations Redis dans le fichier en annexe). La persistance ne semble pas être directement liée à la vitesse de Redis, mais elle garantit la sécurité et la fiabilité des données Redis et joue également un rôle dans la sauvegarde des données.
(6) Résumé
Imaginez si un seul thread ne peut pas exercer les performances d'un processeur multicœur. En fait, ce n'est pas le cas. Nous pouvons l'améliorer en ouvrant plusieurs instances Redis. une seule machine. Un seul thread ne peut utiliser qu'un seul cœur de processeur, de sorte que plusieurs instances peuvent être démarrées sur le même serveur multicœur pour former un maître-maître ou un maître-esclave. Des commandes de lecture fastidieuses peuvent être entièrement exécutées sur l'esclave, permettant ainsi une lecture complète. pour redéfinir le rôle.
Un seul thread signifie que le module de requête réseau utilise un seul thread (il n'est donc pas nécessaire de prendre en compte la sécurité de la concurrence). D'autres modules utiliseront également plusieurs threads. Profitez pleinement de ses avantages lors de l'utilisation de Redis et évitez certaines erreurs. son fonctionnement peut entraîner une dégradation des performances.
Pour plus d'articles techniques liés à Redis, veuillez visiter la colonne Tutoriel Redis pour apprendre !
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!