Pourquoi dit-on que Redis est monothread ?
Redis est un service de dictionnaire distant. Il s'agit d'une base de données de valeurs-clés de type journal open source écrite en langage ANSI C, prend en charge le réseau, peut être basée sur la mémoire et persistante, et fournit API multilingue.
(Partage vidéo d'apprentissage : Tutoriel vidéo Redis)
Processeur d'événements de fichiers
Redis a développé un processeur d'événements réseau basé sur le mode Reactor. traitement Le gestionnaire est appelé gestionnaire d'événements de fichier. Sa structure est composée de 4 parties : plusieurs sockets, un multiplexeur IO, un répartiteur d'événements de fichiers et un processeur d'événements. Étant donné que la consommation de la file d'attente du répartiteur d'événements de fichier est monothread, Redis est appelé un modèle monothread.
Flux de traitement des messages
Le gestionnaire d'événements de fichier utilise des procédures de multiplexage d'E/S (multiplexage) pour écouter plusieurs sockets en même temps, et différents événements les gestionnaires sont associés au socket en fonction de la tâche qu'il exécute actuellement.
Lorsque le socket surveillé est prêt à effectuer des opérations telles que la réponse de connexion (accepter), la lecture (lecture), l'écriture (écriture), la fermeture (fermeture), etc., l'événement de fichier correspondant à l'opération sera se produisent, le gestionnaire d'événements de fichier appellera le gestionnaire d'événements précédemment associé au socket pour gérer ces événements.
Bien que plusieurs événements de fichier puissent se produire simultanément, le multiplexeur d'E/S poussera toujours toutes les sockets génératrices d'événements dans une file d'attente, puis passera par cette file d'attente pour envoyer les sockets au répartiteur d'événements de fichier de manière séquentielle, synchrone, une socket à la fois : après le traitement de l'événement généré par le socket précédent (le socket est l'objet de l'événement) (le gestionnaire d'événements associé est exécuté), et le multiplexeur d'E/S continuera à envoyer le socket suivant à l'événement de fichier répartiteur.
Implémentation du multiplexeur d'E/S
Toutes les fonctions du multiplexeur d'E/S de Redis sont regroupées en sélectionnant, epoll, evport et kqueue. Il est implémenté par la bibliothèque de fonctions de multiplexage. La bibliothèque correspond à un fichier distinct dans le code source Redis, tel que ae_select.c, ae_epoll.c, ae_kqueue.c, etc.
Étant donné que Redis implémente la même API pour chaque bibliothèque de fonctions de multiplexage d'E/S, l'implémentation sous-jacente du programme de multiplexage d'E/S est interchangeable, comme le montre la figure ci-dessous.
Pour une explication détaillée d'epoll, vous pouvez cliquer pour voir et comprendre en profondeur le principe de fonctionnement efficace d'epoll
Redis dans le programme de multiplexage d'E/S La macro #include est utilisée pour définir les règles correspondantes dans le code source d'implémentation. Le programme sélectionnera automatiquement la bibliothèque de fonctions de multiplexage d'E/S la plus performante du système lors de la compilation comme implémentation sous-jacente du programme de multiplexage d'E/S de Redis :<.>
/* Include the best multiplexing layer supported by this system. * The following should be ordered by performances, descending. */ #ifdef HAVE_EVPORT #include "ae_evport.c" #else #ifdef HAVE_EPOLL #include "ae_epoll.c" #else #ifdef HAVE_KQUEUE #include "ae_kqueue.c" #else #include "ae_select.c" #endif #endif #endif
Lors de l'initialisation du serveur Redis, le programme associera ce processeur de réponse de connexion à l'événement AE_READABLE du socket d'écoute du serveur Lorsqu'un client utilise la fonction sys/socket.h/connect pour se connecter au socket d'écoute du serveur Quand, le socket générera un événement AE_READABLE, déclenchant l'exécution du processeur de réponse de connexion et effectuera l'opération de réponse de socket correspondante, comme indiqué dans la figure.
Processeur de demande de commande
La fonction readQueryFromClient dans networking.c est le processeur de demande de commande de Redis. Ce processeur est responsable de la lecture à partir du socket. le contenu de la demande de commande envoyée par le client est spécifiquement implémenté en tant que wrapper de la fonction unistd.h/read.
Lorsqu'un client se connecte avec succès au serveur via le processeur de réponse de connexion, le serveur associera l'événement AE_READABLE du socket client au processeur de demande de commande lorsque le client envoie une demande de commande au serveur, le socket. générera un événement AE_READABLE, déclenchant l'exécution du processeur de demande de commande et effectuera l'opération de lecture de socket correspondante, comme indiqué dans la figure.
Pendant tout le processus de connexion du client au serveur, le serveur associera toujours des processeurs de requêtes de commande pour l'événement AE_READABLE du socket client.
Processeur de réponse de commande
La fonction sendReplyToClient dans networking.c est le processeur de réponse de commande de Redis. Ce processeur est chargé de renvoyer la réponse de commande obtenue par le serveur après l'exécution de la commande au client. via l'extrémité du socket, qui est spécifiquement implémentée en tant que wrapper pour la fonction unistd.h/write.
Lorsque le serveur a une réponse de commande qui doit être envoyée au client, le serveur associera l'événement AE_WRITABLE du socket client au processeur de réponse de commande lorsque le client est prêt à recevoir la réponse de commande de. le serveur, l'événement AE_WRITABLE sera généré, déclenchant l'exécution du processeur de réponse de commande et effectuant l'opération d'écriture de socket correspondante, comme le montre la figure.
Une fois la réponse de commande envoyée, le serveur dissociera le gestionnaire de réponse de commande de l'événement AE_WRITABLE du socket client.
Un exemple complet d'événement de connexion client-serveur
En supposant que le serveur Redis est en cours d'exécution, alors l'événement AE_READABLE du socket d'écoute de ce serveur doit être dans l'état d'écoute, et cet événement Le le processeur correspondant est le processeur de réponse de connexion.
Si un client Redis initie une connexion au serveur Redis à ce moment-là, le socket d'écoute générera un événement AE_READABLE, déclenchant l'exécution du processeur de réponse de connexion : le processeur répondra à la demande de connexion du client, puis create Le socket client, ainsi que l'état du client, et associe l'événement AE_READABLE du socket client au processeur de demande de commande afin que le client puisse envoyer une demande de commande au serveur principal.
Après cela, le client envoie une requête de commande au serveur Redis, puis le socket client générera un événement AE_READABLE, déclenchant l'exécution du processeur de requête de commande. Le processeur lit le contenu de la commande du client puis le transmet. au programme concerné à exécuter.
L'exécution des commandes générera les réponses de commande correspondantes. Afin de transmettre ces réponses de commande au client, le serveur associera l'événement AE_WRITABLE du socket client au gestionnaire de réponse de commande : lorsque le client tente de lire When. la commande répond, le socket client générera un événement AE_WRITABLE, déclenchant l'exécution du processeur de réponse de commande écrit toutes les réponses de commande sur le socket, le serveur libérera l'AE_WRITABLE du socket client Association entre les événements. et les gestionnaires de réponse aux commandes.
Recommandations associées : Tutoriel sur la base de données Redis
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

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

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

Le mode Redis Cluster déploie les instances Redis sur plusieurs serveurs grâce à la rupture, à l'amélioration de l'évolutivité et de la disponibilité. Les étapes de construction sont les suivantes: Créez des instances de redis étranges avec différents ports; Créer 3 instances Sentinel, Moniteur Redis Instances et basculement; Configurer les fichiers de configuration Sentinel, ajouter des informations d'instance Redis de surveillance et des paramètres de basculement; Configurer les fichiers de configuration d'instance Redis, activer le mode de cluster et spécifier le chemin du fichier d'informations de cluster; Créer un fichier nœuds.conf, contenant des informations de chaque instance redis; Démarrez le cluster, exécutez la commande CREATE pour créer un cluster et spécifiez le nombre de répliques; Connectez-vous au cluster pour exécuter la commande d'informations de cluster pour vérifier l'état du cluster; faire

Comment effacer les données Redis: utilisez la commande flushall pour effacer toutes les valeurs de clé. Utilisez la commande flushdb pour effacer la valeur clé de la base de données actuellement sélectionnée. Utilisez SELECT pour commuter les bases de données, puis utilisez FlushDB pour effacer plusieurs bases de données. Utilisez la commande del pour supprimer une clé spécifique. Utilisez l'outil Redis-CLI pour effacer les données.

Pour lire une file d'attente à partir de Redis, vous devez obtenir le nom de la file d'attente, lire les éléments à l'aide de la commande LPOP et traiter la file d'attente vide. Les étapes spécifiques sont les suivantes: Obtenez le nom de la file d'attente: Nommez-le avec le préfixe de "Fitre:" tel que "Fitre: My-Quyue". Utilisez la commande LPOP: éjectez l'élément de la tête de la file d'attente et renvoyez sa valeur, telle que la file d'attente LPOP: My-Queue. Traitement des files d'attente vides: si la file d'attente est vide, LPOP renvoie NIL et vous pouvez vérifier si la file d'attente existe avant de lire l'élément.

L'utilisation des opérations Redis pour verrouiller nécessite l'obtention du verrouillage via la commande setnx, puis en utilisant la commande Expire pour définir le temps d'expiration. Les étapes spécifiques sont les suivantes: (1) Utilisez la commande setnx pour essayer de définir une paire de valeurs de clé; (2) Utilisez la commande Expire pour définir le temps d'expiration du verrou; (3) Utilisez la commande del pour supprimer le verrouillage lorsque le verrouillage n'est plus nécessaire.

L'utilisation de la directive Redis nécessite les étapes suivantes: Ouvrez le client Redis. Entrez la commande (Verbe Key Value). Fournit les paramètres requis (varie de l'instruction à l'instruction). Appuyez sur Entrée pour exécuter la commande. Redis renvoie une réponse indiquant le résultat de l'opération (généralement OK ou -err).

La meilleure façon de comprendre le code source redis est d'aller étape par étape: familiarisez-vous avec les bases de Redis. Sélectionnez un module ou une fonction spécifique comme point de départ. Commencez par le point d'entrée du module ou de la fonction et affichez le code ligne par ligne. Affichez le code via la chaîne d'appel de fonction. Familiez les structures de données sous-jacentes utilisées par Redis. Identifiez l'algorithme utilisé par Redis.

Utilisez l'outil de ligne de commande redis (Redis-CLI) pour gérer et utiliser Redis via les étapes suivantes: Connectez-vous au serveur, spécifiez l'adresse et le port. Envoyez des commandes au serveur à l'aide du nom et des paramètres de commande. Utilisez la commande d'aide pour afficher les informations d'aide pour une commande spécifique. Utilisez la commande QUIT pour quitter l'outil de ligne de commande.

Sur CentOS Systems, vous pouvez limiter le temps d'exécution des scripts LUA en modifiant les fichiers de configuration Redis ou en utilisant des commandes Redis pour empêcher les scripts malveillants de consommer trop de ressources. Méthode 1: Modifiez le fichier de configuration Redis et localisez le fichier de configuration Redis: le fichier de configuration redis est généralement situé dans /etc/redis/redis.conf. Edit Fichier de configuration: Ouvrez le fichier de configuration à l'aide d'un éditeur de texte (tel que VI ou NANO): Sudovi / etc / redis / redis.conf Définissez le délai d'exécution du script LUA: Ajouter ou modifier les lignes suivantes dans le fichier de configuration pour définir le temps d'exécution maximal du script LUA (unité: millisecondes)
