美文网首页
PHP:如何避免商品超卖?

PHP:如何避免商品超卖?

作者: 如梦又似幻 | 来源:发表于2019-12-31 18:01 被阅读0次

正常情况下,每次下单之前要判断促销商品的数量是否足够,不够时不允许下单。
也可以利用关系型数据库的事务来完成下单

$goods = Good::find(1234);
if($goods->stock > 0)
    $db->query('update shop set number = number -1 where id = 1234);

当访问量较大或者需要秒杀商品时,这种方法还是会产生超卖,而且对数据库的性能影响很大(MySQL会出现连接数不够用的情况)。

秒杀情况下,可以使用redis的队列,把需要秒杀的商品放入缓存中,为每个缓存商品建立请求队列,以最快的速度响应客户端,异步写入数据库。

public function push() {
    // 秒杀产品写入队列
    $redis->lpush("queue", 1);
}

// 后台异步执行
public function pop() {
    while (($key = $redis->rpop("queue"))) {
        $shop = Shop::find(123456);
        if ($shop->number > 0) {
            DB::update("update shop set number = number - 1 where id = 1")
        }
    }
}

相关文章

  • PHP:如何避免商品超卖?

    正常情况下,每次下单之前要判断促销商品的数量是否足够,不够时不允许下单。也可以利用关系型数据库的事务来完成下单 当...

  • (一)如何解决秒杀的性能问题和超卖的讨论(5)

    超卖:任何商品都会有数量上限,如何避免成功下订单买到商品的人数不超过商品数量的上限, 二、如何解决 1、前端: 面...

  • B2B2C商城和ERP对接中的超卖问题

    1.什么是超卖问题? 商城平台中超卖问题是经常发生的,那什么是超卖问题?超卖问题就是已售商品库存 > 实际库存,现...

  • 分布式锁简单介绍

    工作中经常会遇到争抢共享资源的场景,比如用户抢购秒杀商品,如果不对商品库存进行保护,可能会造成超卖的情况。超卖现象...

  • 秒杀系统实现总结

    秒杀系统面临的技术挑战: 访问量大,对网络带宽要求高 系统如何支持瞬间的高并发 如何防止商品超卖 如何防刷、防黄牛...

  • 高并发库存减扣方案

    一、概述 电商平台中,订单模块的一个非常重要的点就是防止商品超卖。什么叫商品超卖,就是用户显示下单成功,但库存因为...

  • PHP开发中解决并发问题的几种实现方法分析

    对于商品抢购等并发场景下,可能会出现超卖的现象,这时就需要解决并发所带来的这些问题了 在PHP语言中并没有原生的提...

  • PHP文件锁类防止并发

    对于商品抢购等并发场景下,可能会出现超卖的现象,这时就需要解决并发所带来的这些问题了。在PHP语言中并没有原生的提...

  • 解决商品超卖问题

    一般的商品预下单会有一下流程,判断商品的库存,如果有库存,那么减库存,生成订单(这两个操作是一个事务)。在高并发的...

  • 高并发秒杀抢购系统设计

    概述 概述: 介绍高并发场景中非常容易出现的设计错误以及如何避免超卖和如何提高系统负载能力。 涉及知识点: 1.多...

网友评论

      本文标题:PHP:如何避免商品超卖?

      本文链接:https://www.haomeiwen.com/subject/mjcioctx.html