当前位置:首页 > PHP

php 实现秒杀

2026-02-13 13:32:20PHP

秒杀系统设计要点

高并发秒杀系统的核心在于解决库存超卖、系统崩溃等问题。PHP实现需结合缓存、队列、数据库锁等技术。

使用Redis原子操作控制库存

Redis的原子性操作能有效避免超卖。将库存预热到Redis中,利用DECRINCRBY进行原子减库存:

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 检查库存
$remaining = $redis->get('seckill_stock');
if ($remaining <= 0) {
    die('已售罄');
}

// 原子减库存
if ($redis->decr('seckill_stock') >= 0) {
    // 生成订单(异步处理)
    enqueue_order_queue($user_id, $product_id);
    echo '抢购成功';
} else {
    $redis->incr('seckill_stock'); // 回滚
    echo '库存不足';
}

消息队列异步处理

使用RabbitMQ或Kafka将订单请求异步化,减轻数据库压力:

function enqueue_order_queue($user_id, $product_id) {
    $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
    $channel = $connection->channel();
    $channel->queue_declare('order_queue', false, true, false, false);

    $msg = new AMQPMessage(json_encode([
        'user_id' => $user_id,
        'product_id' => $product_id,
        'time' => time()
    ]));

    $channel->basic_publish($msg, '', 'order_queue');
    $channel->close();
    $connection->close();
}

数据库最终一致性

消费者处理队列消息时,使用数据库事务确保数据一致:

// 消费者端代码示例
$db = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$db->beginTransaction();

try {
    $stmt = $db->prepare("UPDATE products SET stock = stock - 1 WHERE id = ? AND stock > 0");
    $stmt->execute([$product_id]);

    if ($stmt->rowCount() > 0) {
        $order_stmt = $db->prepare("INSERT INTO orders (...) VALUES (...)");
        $order_stmt->execute([...]);
        $db->commit();
    } else {
        $db->rollBack();
    }
} catch (Exception $e) {
    $db->rollBack();
}

限流与防刷

使用令牌桶或漏桶算法控制流量:

php 实现秒杀

// Redis实现简单限流
function is_allowed($user_id, $limit = 5) {
    $key = "seckill_limit:$user_id";
    $count = $redis->incr($key);
    if ($count == 1) {
        $redis->expire($key, 60);
    }
    return $count <= $limit;
}

系统优化建议

前端采用倒计时同步策略,避免客户端时间不准导致提前请求。Nginx层可做请求合并,PHP建议使用Swoole扩展提升并发能力。静态资源与动态接口分离部署,数据库考虑读写分离。

标签: 秒杀php
分享给朋友:

相关文章

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…