php 实现队列
PHP 实现队列的方法
PHP 可以通过多种方式实现队列功能,以下是几种常见的实现方法:
使用数组实现队列
PHP 数组可以通过 array_push 和 array_shift 函数模拟队列的先进先出(FIFO)特性。

$queue = [];
// 入队
array_push($queue, 'item1');
array_push($queue, 'item2');
// 出队
$item = array_shift($queue);
echo $item; // 输出 'item1'
使用 SplQueue 类
PHP 标准库(SPL)提供了 SplQueue 类,专门用于实现队列功能。
$queue = new SplQueue();
// 入队
$queue->enqueue('item1');
$queue->enqueue('item2');
// 出队
$item = $queue->dequeue();
echo $item; // 输出 'item1'
使用 Redis 实现队列
Redis 是一个高性能的键值存储系统,支持队列操作。以下是使用 Redis 实现队列的示例:

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 入队
$redis->rPush('my_queue', 'item1');
$redis->rPush('my_queue', 'item2');
// 出队
$item = $redis->lPop('my_queue');
echo $item; // 输出 'item1'
使用数据库实现队列
数据库表也可以用来模拟队列,以下是使用 MySQL 实现队列的示例:
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
// 入队
$stmt = $pdo->prepare("INSERT INTO queue (data) VALUES (?)");
$stmt->execute(['item1']);
$stmt->execute(['item2']);
// 出队
$stmt = $pdo->prepare("SELECT data FROM queue ORDER BY id ASC LIMIT 1");
$stmt->execute();
$item = $stmt->fetchColumn();
echo $item; // 输出 'item1'
// 删除已出队的项
$stmt = $pdo->prepare("DELETE FROM queue ORDER BY id ASC LIMIT 1");
$stmt->execute();
使用消息队列系统
对于更复杂的场景,可以使用专业的消息队列系统如 RabbitMQ 或 Kafka。以下是使用 RabbitMQ 的示例:
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
$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; // 输出 'item1'
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
};
$channel->basic_consume('my_queue', '', false, false, false, false, $callback);
while ($channel->is_consuming()) {
$channel->wait();
}
$channel->close();
$connection->close();
选择适合的方案
- 简单场景:使用数组或
SplQueue。 - 高性能需求:使用 Redis。
- 持久化需求:使用数据库或 RabbitMQ。
- 分布式系统:使用 RabbitMQ 或 Kafka。




