php实现队列
PHP 实现队列的方法
使用数组实现队列
PHP 的数组可以模拟队列的先进先出(FIFO)特性。array_push 用于入队,array_shift 用于出队。
$queue = [];
// 入队
array_push($queue, 'item1');
array_push($queue, 'item2');
// 出队
$item = array_shift($queue);
echo $item; // 输出 'item1'
使用 SplQueue 类
PHP 的 SPL(Standard PHP Library)提供了 SplQueue 类,专门用于队列操作。

$queue = new SplQueue();
// 入队
$queue->enqueue('item1');
$queue->enqueue('item2');
// 出队
$item = $queue->dequeue();
echo $item; // 输出 'item1'
使用 Redis 实现队列
Redis 的列表结构适合实现高性能队列,适合分布式场景。

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 入队
$redis->rpush('queue', 'item1');
$redis->rpush('queue', 'item2');
// 出队
$item = $redis->lpop('queue');
echo $item; // 输出 'item1'
使用数据库实现队列
数据库表可以模拟队列,适合需要持久化的场景。
// 创建队列表(示例 SQL)
CREATE TABLE queue (
id INT AUTO_INCREMENT PRIMARY KEY,
item TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
// 入队
$pdo->prepare("INSERT INTO queue (item) VALUES (?)")->execute(['item1']);
// 出队
$stmt = $pdo->query("SELECT * FROM queue ORDER BY id ASC LIMIT 1");
$item = $stmt->fetch();
echo $item['item']; // 输出 'item1'
$pdo->prepare("DELETE FROM queue WHERE id = ?")->execute([$item['id']]);
使用消息队列系统(如 RabbitMQ)
对于复杂场景,可以集成 RabbitMQ 等专业消息队列系统。
// 需要安装 php-amqplib 库
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('php_queue', false, false, false, false);
// 入队
$msg = new AMQPMessage('item1');
$channel->basic_publish($msg, '', 'php_queue');
// 出队(消费者端)
$callback = function ($msg) {
echo $msg->body; // 输出 'item1'
};
$channel->basic_consume('php_queue', '', false, true, false, false, $callback);
性能与场景建议
- 简单场景:使用
SplQueue或数组即可。 - 高性能需求:Redis 是内存数据库,适合高并发。
- 持久化需求:数据库或 RabbitMQ 更可靠。
- 分布式系统:Redis 或 RabbitMQ 支持多节点协作。






