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

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

藏色散人
Freigeben: 2020-06-18 13:39:10
nach vorne
4809 Leute haben es durchsucht

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;);
    }
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren
  • 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!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage