Heim  >  Artikel  >  Backend-Entwicklung  >  Anwendungsszenarien für in der Warteschlange verzögerte Aufgaben und geplante Aufgaben in PHP und MySQL

Anwendungsszenarien für in der Warteschlange verzögerte Aufgaben und geplante Aufgaben in PHP und MySQL

王林
王林Original
2023-10-15 12:46:56889Durchsuche

Anwendungsszenarien für in der Warteschlange verzögerte Aufgaben und geplante Aufgaben in PHP und MySQL

Anwendungsszenarien für verzögerte Aufgaben in der Warteschlange und geplante Aufgaben in PHP und MySQL

Einführung:
Mit der Entwicklung des Internets wird der Bedarf an Echtzeit und hoher Parallelität immer höher, um diese zu bewältigen Bei Bedarf kommt es häufig zu verzögerten Aufgaben und geplanten Aufgaben, die in die Warteschlange gestellt werden müssen. Dieser Artikel konzentriert sich auf die Anwendung von warteschlangenverzögerten Aufgaben und geplanten Aufgaben in PHP und MySQL und gibt spezifische Codebeispiele.

1. Anwendungsszenarien verzögerter Aufgaben in Warteschlangen:
Verzögerte Aufgaben in Warteschlangen beziehen sich auf das Einreihen von Aufgaben in die Warteschlange, das Festlegen einer Verzögerungszeit und das anschließende Ausführen der Aufgaben nach einer bestimmten Zeitspanne. Diese Methode wird häufig in einigen Szenarien verwendet, die eine verzögerte Verarbeitung erfordern, z. B. beim Senden von SMS-Bestätigungscodes, beim Senden von E-Mails, beim Erstellen von Berichten usw.

In PHP können wir Redis als Warteschlangendienst verwenden und es mit der Redis-Erweiterungsbibliothek von PHP kombinieren, um verzögerte Aufgaben in der Warteschlange zu implementieren.

Codebeispiel:

// 连接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);
}

?>

Der obige Code stellt zunächst eine Verbindung zum Redis-Server her, stellt dann die Aufgabe in die Verzögerungswarteschlange und legt die Verzögerungszeit auf 60 Sekunden fest. Anschließend wird die Warteschlange kontinuierlich durch eine Schleife überprüft. Wenn eine Aufgabe vorhanden ist, deren Verzögerungszeit abgelaufen ist, wird die Aufgabe ausgeführt und die ausgeführte Aufgabe aus der Warteschlange gelöscht.

2. Anwendungsszenarien geplanter Aufgaben:
Geplante Aufgaben beziehen sich auf die Ausführung von Aufgaben in vorgegebenen Zeitintervallen, z. B. einmal am Tag, einmal pro Stunde usw. Diese Methode wird häufig in Szenarien verwendet, die eine regelmäßige Ausführung erfordern, z. B. Datensicherung, Protokollbereinigung usw.

In PHP können wir den Befehl crontab verwenden, um geplante Aufgaben zu planen.

Codebeispiel:

// 执行定时任务
function doTask() {
    // 固定时间点执行的任务
    echo "Fixed time task executed.

";

}

// 执行周期性任务
function doPeriodicTask() {
    // 周期性执行的任务
    echo "Periodic task executed.

";

}

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

", 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

", FILE_APPEND);

exec("crontab tmpcron");

// 执行任务
doTask();
doPeriodicTask();

?>

In der obige Code, Zuerst werden zwei Funktionen definiert: doTask() und doPeriodicTask(), die jeweils Aufgaben darstellen, die zu einem festen Zeitpunkt ausgeführt werden, und Aufgaben, die regelmäßig ausgeführt werden.

Dann rufen Sie den Befehl crontab über die Befehlszeile auf, um die geplante Aufgabe zur Liste der geplanten Aufgaben des Systems hinzuzufügen. Unter anderem wird der Cron-Parameter verwendet, um die Ausführungszeitregel der Aufgabe anzugeben, was bedeutet, dass sie einmal jeden Morgen und einmal alle fünf Minuten jeder Stunde ausgeführt wird. Der PHP-Befehl wird verwendet, um die Skriptdatei auszuführen, in der sich die geplante Aufgabe befindet, und die Ausgabe in die Ausgabeprotokolldatei umzuleiten.

Abschließend werden im Code die beiden Funktionen doTask() und doPeriodicTask() aufgerufen, um die tatsächliche Ausführung der Aufgabe darzustellen.

Zusammenfassung:
Warteschlangenverzögerte Aufgaben und geplante Aufgaben haben eine breite Palette von Anwendungsszenarien in PHP und MySQL. Durch die Verwendung verzögerter Aufgaben in der Warteschlange können wir einige Aufgaben implementieren, die eine verzögerte Verarbeitung erfordern, und die Echtzeitleistung des Systems verbessern. Durch die Verwendung geplanter Aufgaben können wir einige Aufgaben implementieren, die regelmäßig ausgeführt werden müssen, und die Automatisierung des Systems verbessern. Das Obige enthält spezifische Codebeispiele für die Anwendung von in der Warteschlange verzögerten Aufgaben und geplanten Aufgaben in PHP und MySQL als Referenz für die Leser.

Das obige ist der detaillierte Inhalt vonAnwendungsszenarien für in der Warteschlange verzögerte Aufgaben und geplante Aufgaben in PHP und MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn