Redis utilise une base de données KV basée sur la mémoire qui utilise un modèle mono-processus et monothread et est écrite en langage C. Les données officielles fournies indiquent qu'il peut atteindre plus de 100 000 qps. Ces données ne sont pas pires que Memcached, la même base de données KV basée sur la mémoire qui utilise un processus unique et multithread.
Les principales raisons pour lesquelles Redis est rapide sont :
1 Entièrement basé sur la mémoire
2 La structure des données est simple et les opérations sur les données. sont également simples
3. Utiliser le modèle de multiplexage d'E/S multicanal
Je n'entrerai pas dans les détails sur le premier et le deuxième points, mais me concentrerai principalement sur le troisième point en utilisant le multi- Technologie de multiplexage E/S des canaux.
Le modèle de multiplexage d'E/S multicanal utilise select, poll et epoll pour surveiller les événements d'E/S de plusieurs flux en même temps. Lorsqu'il est inactif, le thread actuel sera bloqué. a Lorsqu'il y a des événements d'E/S dans plusieurs flux, ils sortiront de l'état de blocage, de sorte que le programme interrogera tous les flux (epoll interroge uniquement les flux qui ont réellement émis des événements) et ne les traitera séquentiellement que lorsqu'ils le seront. prêt à Stream, cette approche évite beaucoup d’opérations inutiles. Ici, « multiple » fait référence à plusieurs connexions réseau et « réutilisation » fait référence à la réutilisation du même thread. 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), et Redis exploite les données en mémoire très rapidement (les opérations en mémoire ne deviendront pas un problème ici ). Goulot d'étranglement des performances), les deux points ci-dessus contribuent principalement au débit élevé de Redis.
Contrairement à Memcached, Redis n'utilise pas Libevent directement, mais complète une implémentation très légère d'interfaces courantes telles que select, epoll, evport et kqueue. Choisissez l'interface appropriée pour les différents appels système. La valeur par défaut sous Linux est epoll. Parce que Libevent est relativement lourd et polyvalent, la quantité de code est très importante et il possède de nombreuses fonctions que Redis ne peut pas utiliser. Afin de rechercher la « légèreté » et de supprimer les dépendances, Redis a choisi de l'encapsuler lui-même.
Avantages du processus unique et du thread unique
1 Le code est plus clair et la logique de traitement est plus simple.
2. 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 verrouillage, et il n'y a pas de consommation de performances causée par d'éventuels blocages.
3. Il n'y a pas de consommation de processeur due à la commutation provoquée par le multi-processus ou le multi-thread.
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!