Maison >cadre php >Laravel >solution de vente flash de loterie à haute concurrence laravel

solution de vente flash de loterie à haute concurrence laravel

藏色散人
藏色散人avant
2020-06-18 13:34:214842parcourir

La colonne tutorielle suivante de Laravel vous donnera la solution de vente flash de loterie à haute concurrence Laravel. J'espère qu'elle sera utile aux amis qui en ont besoin !

solution de vente flash de loterie à haute concurrence laravel

Tests

  • 1.<code><span style="font-size: 16px;">8核16G</span>8 cœurs 16G serveur<span style="font-size: 16px;">Jmeter</span><span style="font-size: 16px;">Jmeter</span> <span style="font-size: 16px;">2000</span>Concurrence
2000

Remarque

<span style="font-size: 16px;">1000</span> Faire pas de test sur une seule machine Pour des raisons de réseau, il est normal de tester la concurrence

1000

sur cette machine sans verrouillage. Vous pouvez acheter une machine de test sur Alibaba Cloud

1. Version de verrouillage partagé mysql

sql plus verrouillage partagé, stock Diminuer le champ de 1. Renvoyer le succès signifie le succès, renvoyer l'échec signifie décrémenter l'échec. les champs de stock ne sont pas signés

Fichier de migration

<?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. file d'attente Reids <span style="font-size: 16px;">lpush</span>1.
  • <li>lpush<span style="font-size: 16px;"></span> </li>rejoindre la file d'attente<span style="font-size: 16px;">lpop</span> <span style="font-size: 16px;">null</span>2.
lpop File d'attente contextuelle, renvoie avec succès la valeur correspondante, sinon, renvoie <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</path>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer