您好,欢迎来到易妖游戏网。
搜索
您的当前位置:首页laravel高并发之抽奖秒杀解决方案

laravel高并发之抽奖秒杀解决方案

来源:易妖游戏网


1.mysql共享锁版

sql加共享锁,stock字段减1。返回成功表示成功,返回失败表示自减失败。stock字段是无符号的

迁移文件

<?php

use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;

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');
 }
}

代码

$model = new AppModelsStockTest();
$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队列

  • 1.lpush加入队列
  • 2.lpop弹窗队列,成功返回对应值,不存在返回null
  • Copyright © 2019- vipyiyao.com 版权所有 湘ICP备2023022495号-8

    违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

    本站由北京市万商天勤律师事务所王兴未律师提供法律服务