Maison base de données Redis Explication détaillée du traitement des tâches asynchrones dans Redis

Explication détaillée du traitement des tâches asynchrones dans Redis

Jun 20, 2023 am 08:26 AM
redis 处理 异步任务

À mesure que les applications Web continuent de se développer, le besoin de traitement asynchrone des tâches devient de plus en plus important, car nous devons nous assurer que les utilisateurs peuvent continuer à utiliser l'application avant de terminer la tâche. Dans ce cas, à l'exception du traitement des tâches asynchrones, le traitement parallèle multitâche ne peut pas être réalisé, il est donc souvent nécessaire d'utiliser certains outils pour gérer les tâches asynchrones, parmi lesquels Redis est un outil très utile.

Redis est une base de données en mémoire hautes performances qui peut être utilisée pour stocker, lire et exploiter rapidement des données. Son utilisation principale est d'implémenter la mise en cache et la messagerie, mais il peut également être utilisé pour gérer des tâches asynchrones. Redis dispose de fonctionnalités intégrées de mise en file d'attente et de publication/abonnement, ce qui en fait un outil très utile pour le traitement des tâches asynchrones.

Dans cet article, nous présenterons comment utiliser Redis pour implémenter le traitement des tâches asynchrones.

  1. Établir une connexion Redis

Tout d'abord, nous devons utiliser un client Redis pour établir une connexion avec le serveur Redis. Tout client prenant en charge les connexions Redis peut être utilisé. Le redis-py de Python est un très bon choix. Veuillez vous assurer d'installer redis-py globalement :

pip install redis
Copier après la connexion

Ensuite, vous pouvez utiliser la commande suivante pour établir une connexion Redis :

import redis

redis_conn = redis.Redis(host='localhost', port=6379, db=0)
Copier après la connexion

Ici, nous avons créé une instance de connexion Redis nommée redis_conn , cette instance se connectera au serveur Redis local (host='localhost'), le numéro de port est 6379 (port=6379) et utilisera la base de données n°0 (db=0).

  1. Redis Queue

Redis Queue (RQ) est une bibliothèque Python qui utilise Redis comme backend pour implémenter une file d'attente de tâches distribuée. RQ est construit sur les commandes lpush et rpop de Redis, il offre donc de très bonnes performances.

Installer RQ et Redis :

pip install rq redis
Copier après la connexion
  1. Tâche de synchronisation

Dans la tâche de synchronisation, le thread principal s'exécutera tout le code et attendez que la tâche soit terminée. Voici un exemple de code pour une tâche synchronisée :

import time

def task():
    # 等待5秒
    time.sleep(5)
    print('Task complete')

print('Starting task')
task()
print('Task ended')
Copier après la connexion

Dans l'exemple ci-dessus, nous définissons une fonction nommée tâche qui attend 5 secondes puis affiche "Tâche terminée". Ensuite, nous appelons cette tâche dans le thread principal, affichons "Tâche de démarrage", attendons 5 secondes et affichons "Tâche terminée".

Cette approche fonctionne pour les tâches de courte durée, mais pour les tâches de longue durée, elle peut laisser les utilisateurs très mécontents car ils ne peuvent pas utiliser l'application.

Voyons maintenant comment convertir cette tâche en tâche asynchrone.

  1. Tâche asynchrone

L'idée de convertir une tâche en tâche asynchrone est d'exécuter la tâche dans un thread ou un processus séparé et exécutez-le dans le principal. L'autre code continue de s'exécuter dans le thread. De cette façon, l'utilisateur peut continuer à utiliser l'application pendant que les tâches sont exécutées en arrière-plan.

En Python, vous pouvez utiliser des threads ou des processus pour effectuer des tâches en arrière-plan. Mais si plusieurs tâches sont en cours d'exécution, le nombre de threads et de processus peut augmenter, et ils peuvent également développer des problèmes, tels que des blocages et des problèmes de synchronisation.

L'utilisation de Redis peut résoudre ce problème, car Redis a une structure de file d'attente intégrée qui nous permet d'éviter ces problèmes. L'idée de base de l'implémentation de tâches asynchrones dans Redis est de créer une file d'attente de tâches et d'ajouter des tâches à la file d'attente. Créez ensuite un exécuteur de tâches distinct pour placer les tâches dans la file d'attente et les exécuter.

Étant donné que Redis est une base de données en mémoire, vous pouvez l'utiliser pour stocker toutes les données de la file d'attente. De cette façon, nous pouvons stocker l'état des tâches dans Redis et n'avons pas besoin d'utiliser des threads ou des processus pour gérer les tâches.

Ce qui suit est un exemple de code pour une tâche asynchrone :

from rq import Queue
from redis import Redis

redis_conn = Redis()
q = Queue(connection=redis_conn)

def task():
    # 等待5秒
    time.sleep(5)
    print('Task complete')

print('Starting task')
job = q.enqueue(task)
print('Task started')
Copier après la connexion

Dans le code ci-dessus, nous créons d'abord une file d'attente Redis nommée q, puis définissons une tâche nommée function. Lors de l'appel d'une tâche dans le thread principal, nous ajoutons la tâche à la file d'attente à l'aide de la méthode enqueue de l'objet file d'attente. Cette méthode renvoie un objet tâche nommé job, qui représente la tâche dans la file d'attente. Ensuite, nous affichons "Tâche démarrée" et l'exécuteur de file d'attente obtiendra la tâche en arrière-plan et l'exécutera.

  1. Surveillance des tâches

Dans l'exemple précédent, nous pouvons utiliser l'objet job pour surveiller l'état de la tâche et récupérer les résultats. Voici l'exemple de code expliquant comment surveiller une tâche :

from rq import Queue
from redis import Redis

redis_conn = Redis()
q = Queue(connection=redis_conn)

def task():
    # 等待5秒
    time.sleep(5)
    return 'Task complete'

print('Starting task')
job = q.enqueue(task)
print('Task started')

# 检查任务状态并获取结果
while job.result is None:
    print('Task still processing')
    time.sleep(1)

print('Task complete: {}'.format(job.result))
Copier après la connexion

Dans le code ci-dessus, nous vérifions la propriété result de la tâche jusqu'à ce qu'elle ne soit pas vide. Nous affichons ensuite « Tâche terminée : » plus le résultat de l'objet tâche.

  1. Using Publish/Subscribe

Redis prend également en charge le modèle de publication/abonnement (pub/sub), ce qui en fait un message très utile. outils. Dans ce modèle, un éditeur publie des messages sur un sujet et les abonnés s'abonnent au sujet et reçoivent tous les messages sur le sujet.

Prenons comme exemple une tâche asynchrone pour illustrer l'implémentation à l'aide du modèle de publication/abonnement.

Tout d'abord, nous devons créer un identifiant unique pour chaque tâche et ajouter la tâche à la file d'attente. Nous publions ensuite l'ID de la tâche dans le sujet. L'exécuteur de tâches s'abonne au sujet et lorsqu'un ID de tâche est reçu, il récupère la tâche et l'exécute.

Ce qui suit est un exemple de code pour implémenter une tâche asynchrone en utilisant le modèle de publication/abonnement :

from rq import Queue
from redis import Redis
import uuid

redis_conn = Redis()
q = Queue(connection=redis_conn)

# 订阅任务主题并执行任务
def worker():
    while True:
        _, job_id = redis_conn.blpop('tasks')
        job = q.fetch_job(job_id.decode('utf-8'))
        job.perform()

# 发布任务并将其ID添加到队列中
def enqueue_task():
    job = q.enqueue(task)
    redis_conn.rpush('tasks', job.id)

def task():
    # 等待5秒
    time.sleep(5)
    return 'Task complete'

print('Starting workers')
for i in range(3):
    # 创建3个工作线程
    threading.Thread(target=worker).start()

print('Enqueueing task')
enqueue_task()
print('Task enqueued')
Copier après la connexion

Dans le code ci-dessus, nous définissons d'abord un exécuteur de tâche nommé travailleur, ce l'exécuteur continue de boucler et de déplanifier les ID de tâches de la file d'attente. Lorsqu'il obtient l'ID de tâche, il utilise la méthode fetch_job pour obtenir l'objet tâche et l'exécuter.

Nous définissons également une fonction appelée enqueue_task, qui crée une tâche asynchrone nommée job et ajoute son ID à la file d'attente. Nous appelons ensuite cette fonction dans le thread principal et publions l'ID de la tâche dans une rubrique appelée « tâches ». L'exécuteur de la tâche obtiendra la tâche et l'exécutera lorsqu'il recevra l'ID de la tâche.

  1. Summary

Dans cet article, nous avons présenté comment utiliser Redis pour implémenter le traitement des tâches asynchrones. Nous avons utilisé des files d'attente, le modèle de publication/abonnement et la bibliothèque RQ en python, tout en montrant comment convertir des tâches en mode asynchrone et utiliser des tâches asynchrones pour résoudre les problèmes d'expérience utilisateur. Redis est très utile lors de la gestion de tâches asynchrones car il fournit des fonctionnalités intégrées de mise en file d'attente et de publication/abonnement avec de très bonnes performances. Si vous souhaitez rendre votre application Web réactive et mettre en œuvre un traitement de tâches asynchrone, Redis est un bon choix.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment construire le mode Cluster Redis Comment construire le mode Cluster Redis Apr 10, 2025 pm 10:15 PM

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 utiliser la commande redis Comment utiliser la commande redis Apr 10, 2025 pm 08:45 PM

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).

Comment afficher toutes les clés dans Redis Comment afficher toutes les clés dans Redis Apr 10, 2025 pm 07:15 PM

Pour afficher toutes les touches dans Redis, il existe trois façons: utilisez la commande Keys pour retourner toutes les clés qui correspondent au modèle spécifié; Utilisez la commande SCAN pour itérer les touches et renvoyez un ensemble de clés; Utilisez la commande info pour obtenir le nombre total de clés.

Comment utiliser un seul fileté redis Comment utiliser un seul fileté redis Apr 10, 2025 pm 07:12 PM

Redis utilise une architecture filetée unique pour fournir des performances élevées, une simplicité et une cohérence. Il utilise le multiplexage d'E / S, les boucles d'événements, les E / S non bloquantes et la mémoire partagée pour améliorer la concurrence, mais avec des limites de limitations de concurrence, un point d'échec unique et inadapté aux charges de travail à forte intensité d'écriture.

Comment effacer les données redis Comment effacer les données redis Apr 10, 2025 pm 10:06 PM

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.

Comment démarrer le serveur avec redis Comment démarrer le serveur avec redis Apr 10, 2025 pm 08:12 PM

Les étapes pour démarrer un serveur Redis incluent: Installez Redis en fonction du système d'exploitation. Démarrez le service Redis via Redis-Server (Linux / MacOS) ou Redis-Server.exe (Windows). Utilisez la commande redis-Cli Ping (Linux / MacOS) ou redis-Cli.exe Ping (Windows) pour vérifier l'état du service. Utilisez un client redis, tel que redis-cli, python ou node.js pour accéder au serveur.

Comment lire le code source de Redis Comment lire le code source de Redis Apr 10, 2025 pm 08:27 PM

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.

Comment utiliser Redis Lock Comment utiliser Redis Lock Apr 10, 2025 pm 08:39 PM

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.

See all articles