Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Senario aplikasi tugasan tertunda giliran dan tugasan berjadual dalam PHP dan MySQL

Senario aplikasi tugasan tertunda giliran dan tugasan berjadual dalam PHP dan MySQL

王林
王林asal
2023-10-15 12:46:56894semak imbas

Senario aplikasi tugasan tertunda giliran dan tugasan berjadual dalam PHP dan MySQL

Senario aplikasi tugasan tertunda baris gilir dan tugas berjadual dalam PHP dan MySQL

Pengenalan:
Dengan pembangunan Internet Permintaan untuk masa nyata dan konkurensi tinggi semakin tinggi dan lebih tinggi Untuk menghadapi tuntutan ini, kita selalunya perlu menggunakan tugasan tertunda beratur dan tugasan berjadual. Artikel ini akan menumpukan pada cara menggunakan tugasan tertunda baris gilir dan tugasan berjadual dalam PHP dan MySQL, serta memberikan contoh kod khusus.

1. Senario aplikasi tugasan tertunda dalam baris gilir:
Tugasan tertunda dalam baris gilir merujuk kepada meletakkan tugasan ke dalam baris gilir, menetapkan masa kelewatan dan kemudian melaksanakan tugasan selepas tempoh masa. Kaedah ini sering digunakan dalam beberapa senario yang memerlukan pemprosesan tertangguh, seperti menghantar kod pengesahan SMS, menghantar e-mel, menjana laporan, dsb.

Dalam PHP, kami boleh menggunakan Redis sebagai perkhidmatan baris gilir dan menggabungkannya dengan perpustakaan sambungan Redis PHP untuk melaksanakan tugas tertunda dalam baris gilir.

Contoh kod:

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

?>

kod di atas dahulu Redis pelayan , kemudian masukkan tugasan ke dalam baris gilir kelewatan dan tetapkan masa tunda kepada 60 saat. Kemudian baris gilir disemak secara berterusan melalui gelung Jika terdapat tugasan yang masa tundanya telah tamat, tugas itu dilaksanakan dan tugas yang dilaksanakan dipadamkan daripada baris gilir.

2. Senario aplikasi tugas berjadual:
Tugas berjadual merujuk kepada melaksanakan tugas mengikut selang masa yang telah ditetapkan, seperti sekali sehari, sekali sejam, dsb. Kaedah ini sering digunakan dalam senario yang memerlukan pelaksanaan berkala, seperti sandaran data, pembersihan log, dsb.

Dalam PHP, kita boleh menggunakan arahan crontab untuk menjadualkan tugas yang dijadualkan.

Contoh kod:

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

";

}

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

reee

🎜🎜#🎜🎜

", FILE_APPEND);

}

// 指定固定时间点的定时任务(例如每天凌晨执行)
$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

?>

#🎜 kod di atas🎜, yang pertama🎜 definisi ialah Dua fungsi: doTask() dan doPeriodicTask(), masing-masing mewakili tugasan yang dilaksanakan pada titik masa tetap dan tugasan dilaksanakan secara berkala.

Kemudian panggil arahan crontab melalui baris arahan untuk menambah tugasan yang dijadualkan pada senarai tugasan yang dijadualkan sistem. Antaranya, parameter cron digunakan untuk menentukan peraturan masa pelaksanaan tugas, yang bermaksud ia akan dilaksanakan sekali setiap pagi dan sekali setiap minit kelima setiap jam. Perintah php digunakan untuk melaksanakan fail skrip di mana tugas berjadual terletak dan mengalihkan output ke fail log output.

Akhir sekali, kedua-dua fungsi doTask() dan doPeriodicTask() dipanggil dalam kod untuk mewakili pelaksanaan sebenar tugasan.

Ringkasan:

Tugasan tertunda giliran dan tugas berjadual mempunyai pelbagai senario aplikasi dalam PHP dan MySQL. Dengan menggunakan tugas tertunda dalam baris gilir, kami boleh melaksanakan beberapa tugas yang memerlukan pemprosesan tertangguh dan meningkatkan prestasi masa nyata sistem. Dengan menggunakan tugas berjadual, kami boleh melaksanakan beberapa tugas yang perlu dilaksanakan secara berkala dan menambah baik automasi sistem. Di atas memberikan contoh kod khusus untuk menggunakan tugasan tertunda giliran dan tugas berjadual dalam PHP dan MySQL untuk rujukan pembaca.

Atas ialah kandungan terperinci Senario aplikasi tugasan tertunda giliran dan tugasan berjadual dalam PHP dan MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn