Scénarios d'application de tâches retardées en file d'attente et de tâches planifiées en PHP et MySQL

王林
Libérer: 2023-10-15 13:08:02
original
888 Les gens l'ont consulté

Scénarios dapplication de tâches retardées en file dattente et de tâches planifiées en PHP et MySQL

Scénarios d'application de tâches retardées en file d'attente et de tâches planifiées en PHP et MySQL

Introduction :
Avec le développement d'Internet, la demande de temps réel et de haute concurrence est de plus en plus élevée afin d'y faire face. besoins, nous avons souvent des tâches retardées et des tâches planifiées qui doivent être mises en file d'attente. Cet article se concentrera sur la façon d'appliquer des tâches retardées dans la file d'attente et des tâches planifiées dans PHP et MySQL, et donnera des exemples de code spécifiques.

1. Scénarios d'application de tâches retardées dans les files d'attente :
Les tâches retardées dans les files d'attente font référence à la mise en file d'attente des tâches, à la définition d'un délai, puis à l'exécution des tâches après un certain temps. Cette méthode est souvent utilisée dans des scénarios nécessitant un traitement différé, tels que l'envoi de codes de vérification SMS, l'envoi d'e-mails, la génération de rapports, etc.

En PHP, nous pouvons utiliser Redis comme service de file d'attente et le combiner avec la bibliothèque d'extensions Redis de PHP pour implémenter des tâches retardées dans la file d'attente.

Exemple de code :

// 连接Redis服务器
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 将任务放入队列,设置延迟时间为60秒
$job = ['to' => 'example@example.com', 'subject' => 'Test Email', 'content' => 'Hello, World!'];
$delay = 60;
$redis->zAdd('delayed_queue', time() + $delay, json_encode($job));

// 从队列中取出延迟时间已到的任务,并执行
while (true) {
    $jobs = $redis->zRangeByScore('delayed_queue', 0, time(), ['limit' => [0, 1]]);
    if (!empty($jobs)) {
        $job = array_shift($jobs);
        // 执行任务
        sendEmail(json_decode($job, true));
        // 从队列中删除已执行的任务
        $redis->zRem('delayed_queue', $job);
    }
    // 休眠1秒后再继续检查队列
    sleep(1);
}
Copier après la connexion

?>

Le code ci-dessus se connecte d'abord au serveur Redis, puis place la tâche dans la file d'attente et définit le délai sur 60 secondes. Ensuite, la file d'attente est vérifiée en permanence via une boucle. S'il existe une tâche dont le délai a expiré, la tâche est exécutée et la tâche exécutée est supprimée de la file d'attente.

2. Scénarios d'application de tâches planifiées :
Les tâches planifiées font référence à l'exécution de tâches selon des intervalles de temps prédéterminés, par exemple une fois par jour, une fois par heure, etc. Cette méthode est souvent utilisée dans des scénarios nécessitant une exécution périodique, tels que la sauvegarde des données, le nettoyage des journaux, etc.

En PHP, nous pouvons utiliser la commande crontab pour planifier des tâches planifiées.

Exemple de code :

// 执行定时任务
function doTask() {
    // 固定时间点执行的任务
    echo "Fixed time task executed.
Copier après la connexion

";

}

// 执行周期性任务
function doPeriodicTask() {
    // 周期性执行的任务
    echo "Periodic task executed.
Copier après la connexion

";

}

// 指定固定时间点的定时任务(例如每天凌晨执行)
$cron = '0 0 * * *';
exec("crontab -l > tmpcron");
file_put_contents("tmpcron", "$cron php -f /path/to/task.php >> /path/to/output.log 2>&1
Copier après la connexion

", FILE_APPEND);

exec("crontab tmpcron");

// 间隔一小时执行一次的定时任务(每小时的第5分钟执行)
$cron = '5 * * * *';
exec("crontab -l > tmpcron");
file_put_contents("tmpcron", "$cron php -f /path/to/task.php >> /path/to/output.log 2>&1
Copier après la connexion

", FILE_APPEND);

exec("crontab tmpcron");

// 执行任务
doTask();
doPeriodicTask();
Copier après la connexion

?>

Dans le code ci-dessus, first Deux fonctions sont définies : doTask() et doPeriodicTask(), qui représentent respectivement les tâches exécutées à un instant fixe et les tâches exécutées périodiquement.

Appelez ensuite la commande crontab via la ligne de commande pour ajouter la tâche planifiée à la liste des tâches planifiées du système. Parmi eux, le paramètre cron est utilisé pour spécifier la règle de temps d'exécution de la tâche, ce qui signifie qu'elle sera exécutée une fois chaque matin et une fois toutes les cinq minutes de chaque heure. La commande php est utilisée pour exécuter le fichier de script où se trouve la tâche planifiée et rediriger la sortie vers le fichier journal de sortie.

Enfin, les deux fonctions doTask() et doPeriodicTask() sont appelées dans le code pour représenter l'exécution réelle de la tâche.

Résumé :
Les tâches retardées en file d'attente et les tâches planifiées ont un large éventail de scénarios d'application en PHP et MySQL. En utilisant des tâches retardées dans la file d'attente, nous pouvons implémenter certaines tâches nécessitant un traitement retardé et améliorer les performances en temps réel du système. En utilisant des tâches planifiées, nous pouvons mettre en œuvre certaines tâches qui doivent être exécutées périodiquement et améliorer l'automatisation du système. Ce qui précède donne des exemples de code spécifiques de tâches retardées et de tâches planifiées utilisant des files d'attente en PHP et MySQL pour référence aux lecteurs.

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!