Pourquoi Redis introduit-il le multithreading ?
1. Aperçu du problème
Les versions après Redis 6.0 ont abandonné la conception du modèle monothread, qui utilisait à l'origine une opération monothread, a également commencé à utiliser sélectivement le modèle multithread. il semble que l'auteur de Redis soit tellement génial qu'il n'y a pas d'échappatoire. "La loi du vrai parfum",
Si vous y réfléchissez bien, ce problème peut en fait être divisé en deux questions principales :
(1 ) Pourquoi Redis a-t-il choisi un modèle mono-thread au début (les avantages du mono-threading) ?
(2) Pourquoi Redis a-t-il ajouté le multi-threading après la version 6.0 (dans certains cas, le mono-threading présente des défauts qui peuvent être résolus par le multi-threading) ?
En fait, ce n'est pas que l'auteur n'a pas échappé au vrai théorème du parfum, mais au fil du temps, de plus en plus de problèmes surviennent. La conception originale est définitivement obsolète et des modifications devraient être apportées. OK, avec deux questions, analysons-les attentivement.
2.Pourquoi Redis a-t-il utilisé un seul thread au début ? Qu'il s'agisse d'un seul thread ou de plusieurs threads, c'est pour améliorer l'efficacité du développement de Redis, car Redis est une base de données basée sur la mémoire et gère également un grand nombre de données externes. requêtes réseau. Il est inévitable d’effectuer plusieurs IO. Heureusement, Redis utilise de nombreux excellents mécanismes pour garantir sa haute efficacité. Alors pourquoi Redis est-il conçu en mode monothread ? Cela peut être résumé comme suit :
(1) Multiplexage IO
Jetons un coup d'œil à la conception de haut niveau de Redis.
Une fois qu'une requête réseau est reçue, elle sera traitée rapidement en mémoire. Étant donné que la plupart des opérations sont purement basées sur la mémoire, la vitesse de traitement sera très rapide.
C'est-à-dire qu'en mode monothread, même s'il y a beaucoup de traitement réseau connecté, il peut toujours être ignoré dans le traitement de la mémoire à grande vitesse en raison du multiplexage des E/S.(2) Haute maintenabilité
Bien que le modèle multi-thread fonctionne bien, il introduira une incertitude dans l'ordre d'exécution du programme, provoquant ainsi des problèmes liés à la lecture et à l'écriture simultanées. Le mode monothread permet un débogage et des tests faciles.
(3) Basé sur la mémoire, l'efficacité est toujours élevée dans un état monothread
Le multithread peut utiliser pleinement les ressources du processeur, mais pour Redis, la vitesse basée sur la mémoire est assez élevée et peut traiter 10 Si 100 000 demandes d'utilisateurs par seconde ne sont pas satisfaites, nous pouvons alors utiliser la technologie de partitionnement Redis pour les transmettre à différents serveurs Redis. Cette méthode de cuisson évite d'introduire beaucoup d'opérations multi-thread dans le même service Redis.
À moins qu'une sauvegarde AOF ne soit requise, cette opération n'implique fondamentalement aucune opération d'E/S car elle est basée sur la mémoire. Étant donné que la lecture et l'écriture de ces données s'effectuent uniquement en mémoire, la vitesse de traitement est très rapide ; utiliser un modèle multithread pour gérer toutes les requêtes externes n'est peut-être pas une bonne solution.
Maintenant, nous savons qu'il peut se résumer en deux phrases. Basé sur la mémoire et utilisant la technologie de multiplexage, le mono-threading est très rapide et garantit les caractéristiques du multi-threading. Parce qu'il n'est pas nécessaire d'utiliser le multithreading.3. Pourquoi le multithreading est-il introduit ?
Nous venons de mentionner les avantages du mono-threading, mais je veux maintenant expliquer pourquoi nous devons introduire le multi-threading et surmonter l'inconfort qui en découle. L'introduction du multi-threading montre que dans certains aspects de Redis, le monothreading n'a plus d'avantages.
Étant donné que les appels système de lecture/écriture pour la lecture et l'écriture sur le réseau occupent la majeure partie du temps CPU lors de l'exécution de Redis, si la lecture et l'écriture du réseau sont multithread, les performances seront grandement améliorées.
Le multithread de Redis n'est utilisé que pour la lecture et l'écriture de données réseau et l'analyse de protocole, tandis que l'exécution des commandes est toujours monothread. La raison de cette conception est que nous ne voulons pas que Redis devienne compliqué à cause du multithreading, et nous devons contrôler les problèmes de concurrence tels que les clés, Lua, les transactions, LPUSH/LPOP, etc.
Redis a ajouté certaines opérations de suppression qui peuvent être traitées de manière asynchrone par d'autres threads dans les dernières versions, c'est ce que nous avons mentionné ci-dessus
, pourquoi avons-nous besoin de ces opérations de suppression et pourquoi doivent-elles être un traitement asynchrone ? ?UNLINK
、FLUSHALL ASYNC
和 FLUSHDB ASYNC
Nous savons que Redis peut utiliser la commande del pour supprimer un élément. Si l'élément est très volumineux, qui peut occuper des dizaines ou des centaines de mégaoctets, il ne peut pas être terminé en peu de temps. Cela nécessite un support asynchrone multithread.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds



1. Démarrez le menu [Démarrer], entrez [cmd], cliquez avec le bouton droit sur [Invite de commandes] et sélectionnez Exécuter en tant qu'[Administrateur]. 2. Entrez les commandes suivantes dans l'ordre (copiez et collez soigneusement) : SCconfigwuauservstart=auto, appuyez sur Entrée SCconfigbitsstart=auto, appuyez sur Entrée SCconfigcryptsvcstart=auto, appuyez sur Entrée SCconfigtrustedinstallerstart=auto, appuyez sur Entrée SCconfigwuauservtype=share, appuyez sur Entrée netstopwuauserv , appuyez sur Entrée netstopcryptS.

La stratégie de mise en cache dans GolangAPI peut améliorer les performances et réduire la charge du serveur. Les stratégies couramment utilisées sont : LRU, LFU, FIFO et TTL. Les techniques d'optimisation incluent la sélection du stockage de cache approprié, la mise en cache hiérarchique, la gestion des invalidations, ainsi que la surveillance et le réglage. Dans le cas pratique, le cache LRU est utilisé pour optimiser l'API pour obtenir des informations utilisateur à partir de la base de données. Les données peuvent être rapidement récupérées du cache. Sinon, le cache peut être mis à jour après l'avoir obtenu à partir de la base de données.

Dans le développement PHP, le mécanisme de mise en cache améliore les performances en stockant temporairement les données fréquemment consultées en mémoire ou sur disque, réduisant ainsi le nombre d'accès à la base de données. Les types de cache incluent principalement le cache de mémoire, de fichiers et de bases de données. En PHP, vous pouvez utiliser des fonctions intégrées ou des bibliothèques tierces pour implémenter la mise en cache, telles que cache_get() et Memcache. Les applications pratiques courantes incluent la mise en cache des résultats des requêtes de base de données pour optimiser les performances des requêtes et la mise en cache de la sortie des pages pour accélérer le rendu. Le mécanisme de mise en cache améliore efficacement la vitesse de réponse du site Web, améliore l'expérience utilisateur et réduit la charge du serveur.

Vous devez d’abord définir la langue du système sur l’affichage chinois simplifié et redémarrer. Bien sûr, si vous avez déjà modifié la langue d'affichage en chinois simplifié, vous pouvez simplement ignorer cette étape. Ensuite, commencez à utiliser le registre, regedit.exe, accédez directement à HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNlsLanguage dans la barre de navigation de gauche ou dans la barre d'adresse supérieure, puis modifiez la valeur de la clé InstallLanguage et la valeur de la clé par défaut sur 0804 (si vous souhaitez la changer en anglais en- nous, vous devez d'abord définir la langue d'affichage du système sur en-us, redémarrer le système, puis tout changer en 0409). Vous devez redémarrer le système à ce stade.

L'utilisation du cache Redis peut considérablement optimiser les performances de la pagination du tableau PHP. Cela peut être réalisé en suivant les étapes suivantes : Installez le client Redis. Connectez-vous au serveur Redis. Créez des données de cache et stockez chaque page de données dans un hachage Redis avec la clé « page : {page_number} ». Récupérez les données du cache et évitez les opérations coûteuses sur les grandes baies.

1. Tout d'abord, double-cliquez sur l'icône [Ce PC] sur le bureau pour l'ouvrir. 2. Double-cliquez ensuite sur le bouton gauche de la souris pour accéder à [Lecteur C]. Les fichiers système seront généralement automatiquement stockés dans le lecteur C. 3. Recherchez ensuite le dossier [windows] dans le lecteur C et double-cliquez pour entrer. 4. Après avoir accédé au dossier [windows], recherchez le dossier [SoftwareDistribution]. 5. Après avoir entré, recherchez le dossier [télécharger], qui contient tous les fichiers de téléchargement et de mise à jour Win11. 6. Si nous souhaitons supprimer ces fichiers, supprimez-les simplement directement dans ce dossier.

Redis est un cache clé-valeur hautes performances. L'extension PHPRedis fournit une API pour interagir avec le serveur Redis. Suivez les étapes suivantes pour vous connecter à Redis, stocker et récupérer des données : Connecter : utilisez les classes Redis pour vous connecter au serveur. Stockage : utilisez la méthode set pour définir des paires clé-valeur. Récupération : utilisez la méthode get pour obtenir la valeur de la clé.

Causes et solutions pour les erreurs Lors de l'utilisation de PECL pour installer des extensions dans un environnement Docker Lorsque nous utilisons un environnement Docker, nous rencontrons souvent des maux de tête ...
