>  기사  >  PHP 프레임워크  >  laravel 높은 동시성 복권 플래시 판매 솔루션

laravel 높은 동시성 복권 플래시 판매 솔루션

藏色散人
藏色散人앞으로
2020-06-18 13:34:214784검색

다음 튜토리얼 칼럼은 Laravel에서 Laravel의 동시성 복권 플래시 판매 솔루션을 제공할 것입니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

laravel 높은 동시성 복권 플래시 판매 솔루션

Test

  • 1.<code><span style="font-size: 16px;">8核16G</span>的服务器<span style="font-size: 16px;">Jmeter</span>并发<span style="font-size: 16px;">2000</span>

注意

不要在一台机子上测,因为网络的原因,本机上测并发<span style="font-size: 16px;">1000</span>不用锁也是正常的。可以在阿里云买台测试机

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(&#39;stock_test&#39;, function (Blueprint $table) {
            $table->increments(&#39;id&#39;);
            $table->integer(&#39;stock&#39;)->default(0)->comment(&#39;库存1&#39;);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists(&#39;stock_test&#39;);
    }
}

代码

$model = new \App\Models\StockTest();
$id = $request->input(&#39;id&#39;,1);

try {
    // 手动开始事务
    DB::beginTransaction();
    // sql加共享锁,stock字段减1。返回成功表示成功,返回失败表示自减失败。stock字段是无符号的
    $is = DB::table(&#39;stock_test&#39;)->lockForUpdate()->increment(&#39;stock&#39;,-1);
    if($is)
    {
        log_info(&#39;id=&#39;.$id.&#39;库存减1&#39;);
        // 提交事务
        DB::commit();
        return response(&#39;成功&#39;,200);
    }
    else
    {
        return response(&#39;失败&#39;,201);
    }
} catch (\Exception $exception) {
    // 回滚事务
    DB::rollBack();
    return response(&#39;失败&#39;,201);
}

2.reids队列

  • 1.<span style="font-size: 16px;">lpush</span>加入队列
  • 2.<span style="font-size: 16px;">lpop</span>弹窗队列,成功返回对应值,不存在返回<span style="font-size: 16px;">null</span>8 코어 16G
서버 <!-- flowchart 箭头图标 勿删 -->Jmeter <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"></svg> 동시성 2000🎜🎜🎜🎜🎜Note🎜🎜
🎜🎜네트워크상의 이유로 한 컴퓨터에서 테스트하지 마세요. 동시성은 이 컴퓨터에서 테스트됩니다🎜🎜1000🎜🎜자물쇠를 사용하지 않는 것이 정상입니다. Alibaba Cloud에서 테스트 머신을 구입할 수 있습니다 🎜🎜
🎜🎜1. mysql 공유 잠금 버전 🎜🎜
🎜🎜sql에 공유 잠금이 추가되고 재고 필드가 1씩 줄어듭니다. 성공을 반환하면 성공을 의미하고, 실패를 반환하면 감소에 실패했음을 의미합니다. 주식 필드는 서명되지 않았습니다🎜🎜

🎜Migration file🎜

rrreee

🎜Code🎜

rrreee🎜🎜2.reids queue🎜🎜🎜🎜🎜1.🎜🎜lpush🎜🎜Join the queue🎜🎜🎜🎜2.🎜🎜lpop🎜🎜Popup 큐에 해당 값이 성공적으로 반환되고, 존재하지 않으면 🎜🎜null🎜🎜🎜🎜🎜🎜🎜🎜🎜

위 내용은 laravel 높은 동시성 복권 플래시 판매 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제