- 抢购、秒杀是平常很常见的场景
并发下如何解决库存的减少超卖问题
正常是查询出对应商品的库存,看是否大于0,
然后执行生成订单等操作,但是在判断库存是否大于0处,
如果在高并发下就会有问题,导致库存量出现负数
-
简单模拟一下测试一下
-
准备建表:库存 - 商品 -订单三张表,
-
商品表bt_goods
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateBtGoodsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('bt_goods', function (Blueprint $table) {
$table->increments('id');
$table->integer('goods_id')->comment('商品id');
$table->index('goods_id');
$table->integer('cat_id')->nullable();
$table->string('goods_name',16)->comment('商品名称');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('bt_goods');
}
}
订单表bt_orders
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateBtOrdersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public fun