Redis est un serveur de structure de données en mémoire open source (sous licence BSD) qui peut être utilisé comme courtier de base de données, de cache et de file d'attente de messages. Il prend en charge string, hash table, list, set, Collection commandée , Bitmap , hyperloglogs et d'autres types de données. Réplication intégrée, Script Lua, expulsion LRU, transactions et différents niveaux de fonctions de persistance de disque, tout en offrant une haute disponibilité via Redis Sentinel et un partitionnement automatique via Redis Grappe . À quelle vitesse le 有Redis
, les données officielles fournies peuvent atteindre plus de 100 000 QPS (nombre de requêtes par seconde).
L'axe horizontal est le nombre de connexions et l'axe vertical est QPS.
Nous avons examiné les données officielles et avons constaté que c'est vraiment rapide ; en tant que programmeur avec des rêves, nous devons savoir pourquoi c'est si rapide, n'est-ce pas ?
Ensuite, j'ai vérifié quelques informations sur la page Web, et la situation générale est la suivante :
Elle est entièrement basée sur la mémoire, et la plupart des requêtes sont de pures opérations de mémoire, qui sont très rapides. Les données sont stockées en mémoire, comme HashMap. L'avantage de HashMap est que la complexité temporelle de la recherche et de l'opération est O(1) ; La structure des données dans Redis est conçue de manière spécialisée ;
utilise un seul thread pour éviter les changements de contexte inutiles et les conditions de concurrence. Il n'y a pas de commutation causée par plusieurs processus ou threads qui consomment le processeur. problèmes de verrouillage. Il y a une opération de verrouillage et de libération, et il n'y a pas de consommation de performances causée par d'éventuels blocages ;
utilise un modèle de multiplexage d'E/S multicanal, IO non bloquant ; utilise un modèle sous-jacent différent, Les méthodes d'implémentation sous-jacentes et les protocoles d'application pour la communication avec les clients sont différents. Redis construit directement son propre mécanisme VM, car si le système général appelle des fonctions système, il perdra un certain temps à se déplacer et à demander ;
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é. un ou plusieurs flux Lorsqu'il y a un événement d'E/S, il sort de l'état de blocage, donc le programme interrogera tous les flux (epoll interroge uniquement les flux qui ont réellement émis l'événement) et ne traitera que les flux prêts en séquence Cette approche évite beaucoup d'opérations inutiles.
Pour résumer, il y a en fait trois points :
Utiliser le modèle de réseau epoll et utiliser un seul thread pour traiter les requêtes.
Utilisez diverses structures de données performantes qui répondent à vos besoins.
redis utilise des opérations de mémoire et est écrit en langage C ;
Cette série d'articles ne se concentre pas sur la discussion du modèle de réseau epoll, mais enregistre principalement les principes d'apprentissage de la structure des données Redis. Faites-nous savoir pourquoi le traitement des données Redis est très rapide. Principe de mise en œuvre de la chaîne redis
Principe d'implémentation du hachage de Redis
Introduction à d'autres types de données
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!