rpush + blpop 或 lpush + brpop
simple.php
$stmt = $pdo->prepare('select id, cid, name from zc_goods limit 200000');$stmt->execute();while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $redis->rPush('goods:task', json_encode($row));} $redis->close();
queueBlpop.php
// 出队
while (true) {
// 阻塞设置超时时间为3秒
$task = $redis->blPop(array('goods:task'), 3);
if ($task) {
$redis->rPush('goods:success:task', $task[1]);
$task = json_decode($task[1], true);
echo $task['id'] . ':' . $task['cid'] . ':' . 'handle success';
echo PHP_EOL;
} else {
echo 'nothing' . PHP_EOL; sleep(5);
}
}
php simple.phpphp queueBlpop.php
blpop key1 key2 key3 key4
priority.php
// 设置优先级队列
$high = 'goods:high:task';
$mid = 'goods:mid:task';
$low = 'goods:low:task';
$stmt = $pdo->prepare('select id, cid, name from zc_goods limit 200000');
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
// cid 小于100放在低级队列
if ($row['cid'] < 100) {
$redis->rPush($low, json_encode($row));
// cid 100到600之间放在中级队列
}elseif ($row['cid'] > 100 && $row['cid'] < 600) {
$redis->rPush($mid, json_encode($row));
}
// cid 大于600放在高级队列 else { $redis->rPush($high, json_encode($row)); }
}$redis->close();
priorityBlop.php
// 优先级队列
$high = 'goods:high:task';
$mid = 'goods:mid:task';$low = 'goods:low:task';
// 出队
while(true){ // 优先级高的队列放在左侧
$task = $redis->blPop(array($high, $mid, $low), 3);
if ($task) {
$task = json_decode($task[1], true);
echo $task['id'] . ':' . $task['cid'] . ':' . 'handle success';
echo PHP_EOL;
} else {
echo 'nothing' . PHP_EOL; sleep(5);
}
}
php priority.phpphp priorityBlpop.php
delay.php
$stmt = $pdo->prepare('select id, cid, name from zc_goods limit 200000');$stmt->execute();while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $redis->zAdd('goods:delay:task', time() + rand(1, 300), json_encode($row));}
$rs = $redis->zRange('goods:delay:task', 0, 0, true);
if (empty($rs)) {
echo 'no tasks , sleep 5 seconds' . PHP_EOL;sleep(5);continue;}
$taskJson = key($rs);
$delay = $rs[$taskJson];
$task = json_decode($taskJson, true);
$now = time();// 到时间执行延时任务
if ($delay <= $now) {
if (!($identifier = acquireLock($task['id']))) {
continue;}
$redis->zRem('goods:delay:task', $taskJson);
$redis->rPush('goods:task', $taskJson);
echo $task['id'] . ' run ' . PHP_EOL;
releaseLock($task['id'], $identifier); }
else {
$sleep = $delay - $now;
$sleep = $sleep > 2 ? 2 :$sleep; echo 'wait ' . $sleep . ' seconds ' . PHP_EOL; sleep($sleep); } }
queueBlpop.php
// 出队while (true) {
// 阻塞设置超时时间为3秒
$task = $redis->blPop(array('goods:task'), 3);
if ($task) {
$redis->rPush('goods:success:task', $task[1]);
$task = json_decode($task[1], true);
echo $task['id'] . ':' . $task['cid'] . ':' . 'handle success';
echo PHP_EOL; } else {
echo 'nothing' . PHP_EOL;sleep(5);
}
}
php delay.phpphp delayHanlde.phpphp queueBlpop.php
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有