百搜论坛欢迎您的加入!
adimg adimg
 
昨日:篇  今日:篇   总帖:篇   会员:
博主最大Lv63   
laravel高并发之抽奖秒杀解决方案     
下面由Laravel教程栏目给大家laravel高并发之抽奖秒杀解决方案,希望对需要的朋友有所帮助!

测试

  • 1.8核16G的服务器Jmeter并发2000

注意

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

1.mysql共享锁版

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

迁移文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

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

    }

}

代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

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

  • 1.lpush加入队列
  • 2.lpop弹窗队列,成功返回对应值,不存在返回null

以上就是laravel高并发之抽奖秒杀解决方案的详细内容

 0  已被阅读了1127次  楼主 2020-06-23 09:09:59
回复列表

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

联系站长 友链申请桂ICP备19000949号-1     桂ICP备19000949号-1
您的IP:18.227.111.58,2024-05-16 14:48:57,Processed in 0.02486 second(s).
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
Powered by HadSky 7.12.9
已有0次打赏
(0) 分享
分享
取消
免责声明
1、本站资源,均来自网络,版权归原作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !
如果觉得本文还不错请点个赞或者打赏点轻币哦~
拒绝伸手党,拿走请回复,尊重楼主,尊重你我他~

侵权删除请致信 E-Mail:207882320@qq.com