Redis
 sql >> Base de données >  >> NoSQL >> Redis

La bibliothèque Embedis Redis crée-t-elle son propre thread pour les rappels asynchrones

Le client Redis ne crée aucun thread client supplémentaire et fonctionne dans le thread existant.

Le Redis a fonctionné dans un autre processus (principal). L'API redis que vous utilisez a fonctionné dans votre processus local et utilise la communication interprocessus avec le processus principal. Une requête asynchrone signifie que votre processus ou thread met une tâche à une autre, et après cela peut faire n'importe quelle autre tâche ou attendre un événement. Quelque temps plus tard, une réponse asynchrone est arrivée à votre application et disponible pour utilisation. Votre application doit utiliser https://en.wikipedia.org/wiki/Event_loop ou tout système de gestion asynchrone qui vous avertit en appelant un rappel pour gérer l'événement (dans ce cas, redis answer).

L'architecture asynchrone signifie que vous exécutez une boucle d'événements qui appelle des gestionnaires de rappel pour chaque événement. Lorsque le rappel est appelé, vous pouvez créer un certain nombre de tâches asynchrones. Une fois la tâche créée, il est supposé que lorsque la tâche est terminée ou qu'une erreur se produit, le gestionnaire d'événements de rappel sera appelé. Le rappel peut être affecté au démarrage de l'application ou à l'apparition d'une nouvelle connexion Web. Lorsque le rappel est appelé, vous pouvez créer la tâche redis et un rappel d'événement de résultat ultérieur sera appelé. Toutes les choses dans le fil en cours. J'ai plusieurs threads, il est raisonnable de s'attendre à ce que vous ayez une boucle d'événement pour chaque thread.

Nature à thread unique de Redis :http://redis.io/topics/latency#single-threaded-nature-of-redis

Le socket client est mis dans un état non bloquant puisque Redis utilise le multiplexage et les E/S non bloquantes. http://redis.io/topics/clients Cela signifie que votre client ne sera jamais bloqué.

À partir de Redis 2.4, les threads dans Redis sont utilisés uniquement pour effectuer certaines opérations d'E/S lentes en arrière-plan, principalement liées aux E/S de disque, mais cela ne change pas le fait que Redis traite toutes les requêtes à l'aide d'un seul thread.