下面由Laravel教學專欄給大家laravel高並發之抽獎秒殺解決方案,希望對需要的朋友有所幫助!
<span style="font-size: 16px;"></span>
<span style="font-size: 16px;"></span><span style="font-size: 16px;"></span>
#1.<span style="font-size: 16px;"></span>8核心16G<span style="font-size: 16px;"></span>
#的伺服器2000
<span style="font-size: 16px;"></span>
#注意
1000<span style="font-size: 16px;"></span>不用鎖也是正常的。可以在阿里雲買台測試機
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateStockTestTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('stock_test', function (Blueprint $table) { $table->increments('id'); $table->integer('stock')->default(0)->comment('库存1'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('stock_test'); } }
<span style="font-size: 16px;"></span>#$model = new \App\Models\StockTest();
$id = $request->input('id',1);
try {
// 手动开始事务
DB::beginTransaction();
// sql加共享锁,stock字段减1。返回成功表示成功,返回失败表示自减失败。stock字段是无符号的
$is = DB::table('stock_test')->lockForUpdate()->increment('stock',-1);
if($is)
{
log_info('id='.$id.'库存减1');
// 提交事务
DB::commit();
return response('成功',200);
}
else
{
return response('失败',201);
}
} catch (\Exception $exception) {
// 回滚事务
DB::rollBack();
return response('失败',201);
}
登入後複製 2.reids佇列
<span style="font-size: 16px;"></span>#lpush
<span style="font-size: 16px;"></span>加入佇列<span style="font-size: 16px;"></span>##2.
以上是laravel高併發之抽獎秒殺解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!