• 技术文章 >php框架 >Laravel

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

    藏色散人藏色散人2020-06-18 13:39:10转载2191
    下面由Laravel教程栏目给大家laravel高并发之抽奖秒杀解决方案,希望对需要的朋友有所帮助!

    测试

    注意

    不要在一台机子上测,因为网络的原因,本机上测并发1000不用锁也是正常的。可以在阿里云买台测试机

    1.mysql共享锁版

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

    迁移文件

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

    代码

    $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队列

    以上就是laravel高并发之抽奖秒杀解决方案的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:csdn,如有侵犯,请联系admin@php.cn删除
    上一篇:Laravel 分布式唯一 ID 生成器使用 下一篇:laravel实现点餐系统,快来点餐吧!
    大前端线上培训班

    相关文章推荐

    • 详解Laravel接入paypal支付• Laravel 中的依赖注入和 IoC• laravel扩展包开发步骤【总结】• Laravel 分布式唯一 ID 生成器使用

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网