Heim  >  Artikel  >  PHP-Framework  >  Laravel Lotterie-Flash-Sale-Lösung mit hoher Parallelität

Laravel Lotterie-Flash-Sale-Lösung mit hoher Parallelität

藏色散人
藏色散人nach vorne
2020-06-18 13:34:214801Durchsuche

Die folgende Tutorial-Kolumne von Laravel bietet Ihnen eine Laravel-Lotto-Flash-Sale-Lösung mit hoher Parallelität. Ich hoffe, dass sie Freunden in Not hilfreich sein wird!

Laravel Lotterie-Flash-Sale-Lösung mit hoher Parallelität

Testen

  • 1.<code><span style="font-size: 16px;">8核16G</span>8 Core 16G Server<span style="font-size: 16px;">Jmeter</span><span style="font-size: 16px;">Jmeter</span> <span style="font-size: 16px;">2000</span>Parallelität
2000

Hinweis

<span style="font-size: 16px;">1000</span> Do Aus Netzwerkgründen ist es normal, die Parallelität

1000

auf diesem Computer ohne Sperre zu testen. Sie können eine Testmaschine in Alibaba Cloud kaufen

1. MySQL-Shared-Lock-Version

SQL plus Shared Lock, stock Verringern Sie das Feld um 1. Die Rückkehr von Erfolg bedeutet Erfolg, die Rückkehr von Misserfolg bedeutet, dass die Dekrementierung fehlgeschlagen ist. Bestandsfelder sind nicht signiert

Migrationsdatei

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

Code

$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-Warteschlange <span style="font-size: 16px;">lpush</span>1.
  • <li>lpush<span style="font-size: 16px;"></span> </li>Warteschlange beitreten<span style="font-size: 16px;">lpop</span> <span style="font-size: 16px;">null</span>2.
lpop Popup-Warteschlange, gibt den entsprechenden Wert erfolgreich zurück, andernfalls gibt <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">null zurück </path>

Das obige ist der detaillierte Inhalt vonLaravel Lotterie-Flash-Sale-Lösung mit hoher Parallelität. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen