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

solution de vente flash de loterie à haute concurrence laravel

藏色散人
Libérer: 2020-06-18 13:39:10
avant
4809 Les gens l'ont consulté

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;);
    }
}
Copier après la connexion

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);
}
Copier après la connexion
  • 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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal