php队列实现
PHP 队列实现方法
使用数据库实现队列
创建一个数据库表存储队列任务,结构包含任务ID、任务数据、状态等字段。通过SQL语句实现任务的入队和出队操作。
// 入队示例
$stmt = $pdo->prepare("INSERT INTO queue (task_data, status) VALUES (?, 'pending')");
$stmt->execute([$taskData]);
// 出队示例
$pdo->beginTransaction();
$stmt = $pdo->prepare("SELECT * FROM queue WHERE status = 'pending' ORDER BY id ASC LIMIT 1 FOR UPDATE");
$stmt->execute();
$task = $stmt->fetch();
if ($task) {
$update = $pdo->prepare("UPDATE queue SET status = 'processing' WHERE id = ?");
$update->execute([$task['id']]);
$pdo->commit();
// 处理任务
}
使用Redis实现队列
利用Redis的列表数据结构实现高效的队列操作,支持原子性的入队和出队。

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 入队
$redis->rPush('task_queue', json_encode($taskData));
// 出队
$taskData = $redis->lPop('task_queue');
if ($taskData) {
$task = json_decode($taskData, true);
// 处理任务
}
使用专业队列系统
集成RabbitMQ或Beanstalkd等专业消息队列系统,提供更强大的队列功能。
// RabbitMQ示例
$connection = new AMQPConnection(['host' => 'localhost']);
$channel = $connection->channel();
$channel->queue_declare('task_queue', false, true, false, false);
// 入队
$msg = new AMQPMessage($taskData);
$channel->basic_publish($msg, '', 'task_queue');
// 出队
$callback = function ($msg) {
// 处理任务
$msg->ack();
};
$channel->basic_consume('task_queue', '', false, false, false, false, $callback);
使用Laravel队列系统
Laravel框架内置了队列功能,支持多种队列驱动如数据库、Redis、Amazon SQS等。

// 创建任务类
class ProcessTask implements ShouldQueue
{
public function __construct(public $data) {}
public function handle()
{
// 处理任务逻辑
}
}
// 分发任务
ProcessTask::dispatch($data)->onQueue('high');
实现队列处理器
创建独立的PHP脚本作为队列处理器,持续从队列中获取并执行任务。
// worker.php
while (true) {
$task = getTaskFromQueue(); // 从队列获取任务
if ($task) {
try {
processTask($task);
markTaskAsComplete($task);
} catch (Exception $e) {
markTaskAsFailed($task);
}
} else {
sleep(1); // 队列为空时暂停
}
}
队列监控和管理
实现队列监控机制,跟踪队列长度、处理速度、失败任务等指标,便于系统维护。
function getQueueStats() {
return [
'pending' => getPendingCount(),
'processing' => getProcessingCount(),
'failed' => getFailedCount(),
'processed' => getProcessedCount()
];
}
以上方法可根据项目需求选择适合的队列实现方案,数据库队列适合小型应用,Redis提供高性能,专业队列系统适合复杂场景,框架内置队列简化开发流程。






