php 实现队列
队列的基本概念
队列是一种先进先出(FIFO)的数据结构,常用于任务调度、消息传递等场景。PHP 可以通过数组或扩展库(如 SPL)实现队列功能。
使用数组实现队列
PHP 的数组函数可以模拟队列的入队和出队操作。array_push 用于入队,array_shift 用于出队。

$queue = [];
// 入队操作
array_push($queue, 'item1');
array_push($queue, 'item2');
// 出队操作
$firstItem = array_shift($queue);
echo $firstItem; // 输出 'item1'
使用 SPL 库的 SplQueue 类
PHP 的 SPL(Standard PHP Library)提供了 SplQueue 类,专门用于队列操作。

$queue = new SplQueue();
// 入队操作
$queue->enqueue('item1');
$queue->enqueue('item2');
// 出队操作
$firstItem = $queue->dequeue();
echo $firstItem; // 输出 'item1'
使用 Redis 实现队列
对于高性能需求,可以使用 Redis 作为队列存储。Redis 的 LPUSH 和 RPOP 命令可以实现队列功能。
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 入队操作
$redis->lPush('my_queue', 'item1');
$redis->lPush('my_queue', 'item2');
// 出队操作
$firstItem = $redis->rPop('my_queue');
echo $firstItem; // 输出 'item1'
使用消息队列系统
对于分布式系统,可以使用专业的消息队列系统如 RabbitMQ、Kafka 或 AWS SQS。以下是 RabbitMQ 的简单示例:
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
// 连接到 RabbitMQ
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
// 声明队列
$channel->queue_declare('my_queue', false, false, false, false);
// 入队操作
$msg = new AMQPMessage('item1');
$channel->basic_publish($msg, '', 'my_queue');
// 出队操作(消费者端)
$callback = function ($msg) {
echo $msg->body . "\n";
};
$channel->basic_consume('my_queue', '', false, true, false, false, $callback);
while ($channel->is_consuming()) {
$channel->wait();
}
性能优化建议
- 对于小规模应用,使用数组或
SplQueue足够高效。 - 对于高并发或分布式场景,优先选择 Redis 或专业消息队列系统。
- 避免频繁的数组操作(如
array_shift),因为其时间复杂度为 O(n)。






