laravel抢购

https://www.sunzhongwei.com/using-laravel-sharedlock-and-lockforupdate-for-table-row-locks

https://www.cnblogs.com/kerrycode/p/6991502.html

https://laravel-china.org/docs/laravel/5.6/queries/1398

<?php

namespace App\Http\Controllers;
use App\Http\Requests;
use BaconQrCode\Common\Mode;
use PhpParser\Node\Expr\AssignOp\Mod;
use zm\Response\Services\Response;
use App\Models;
use Yansongda\LaravelPay\Facades\Pay;
use Illuminate\Http\Request;
//use Illuminate\Http\Response;
use SimpleSoftwareIO\QrCode\Facades\QrCode;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Log;
use zm\Sms\Facades\Sms;
use Illuminate\Support\Facades\Redis;

use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;

class PrizeController extends Controller
{
    /**
     * 抽奖列表
     * @param Request $requset
     */
    function get_rand($proArr) { 
        $result = '';  
        //概率数组的总概率精度 
        $proSum = array_sum($proArr);  
        //概率数组循环 
        foreach ($proArr as $key => $proCur) { 
            $randNum = mt_rand(1, $proSum); 
            if ($randNum <= $proCur) { 
                $result = $key; 
                break; 
            } else { 
                $proSum -= $proCur; 
            }
        } 
        unset ($proArr);  
        return $result; 
    } 
    public function index(Request $request,Response $response){
#https://blog.csdn.net/dongsg11200/article/details/24607877
#https://www.cnblogs.com/shiwenhu/p/5650269.html
#https://www.jb51.net/article/66065.htm
$prize_arr = Models\Prize_list::select('prize_id','prize_name','prize_rate')->get()->toArray();
foreach ($prize_arr as $key => $val) { 
   $arr[$val['prize_id']] = $val['prize_rate']; 

$rid = $this->get_rand($arr); //根据概率获取奖项prize_id 
 
$res['yes'] = $prize_arr[$rid-1]['prize_name']; //中奖项 
unset($prize_arr[$rid-1]); //将中奖项从数组中剔除,剩下未中奖项 
shuffle($prize_arr); //打乱数组顺序 
for($i=0;$i<count($prize_arr);$i++){ 
   $pr[] = $prize_arr[$i]['prize_name']; 

$res['no'] = $pr; 
echo "<pre>";
print_r($res); 
    }

    public function test1(){

//echo __method__;

 $result = Cache::add('pro_id','y',1);
 if($result==1){

    //code
 }

$pro_1_num = Cache::get("pro_1_num");
if($pro_1_num == ""){
Cache::put("pro_1_num", 1, 2);
}elseif($pro_1_num<=10){
$pro_1_num+=1;
Cache::put("pro_1_num", $pro_1_num, 2);

$prize = Models\Prize_list::where('prize_id',1)->first();
//dd($prize->toArray());
if($prize->prize_num>0){
echo "ok";
Models\Prize_zhong_list::create(
[
"uid"=>1,
"mobile"=>"138****0731",
"prize_id"=>1,
"prize_name"=>"平板电脑",
"addtime"=>time()
]
);
        Models\Prize_list::where('prize_id',1)->decrement('prize_num');
}
}
echo "pro_1_num=>".$pro_1_num."\r\n";
    }

    public function test2(){
 DB::beginTransaction();
 $results = DB::select('select * from prize_list where prize_id = :id for update', ['id' => 1]);
 $results = $results[0];
 #$sql="select storenum from `product` where 1 for update";
 if($results->prize_num>0){
#echo "adfasd";
    Models\Prize_zhong_list::create(
    [
    "uid"=>1,
    "mobile"=>"138****0731",
    "prize_id"=>1,
    "prize_name"=>"平板电脑",
    "addtime"=>time()
    ]
    );
            ##Models\Prize_list::where('prize_id',1)->decrement('prize_num');
DB::table('prize_list')->where('prize_id',1)->decrement('prize_num');
DB::commit();
 }
    }

    public function test3(){
 DB::beginTransaction();
 DB::table('prize_list')->where('prize_id',1)->decrement('prize_num');
 Models\Prize_zhong_list::create(
  [
  "uid"=>1,
  "mobile"=>"138****0731",
  "prize_id"=>1,
  "prize_name"=>"平板电脑",
  "addtime"=>time()
  ]
 );
 $results = DB::select('select * from prize_list where prize_id = :id', ['id' => 1]);
 $results = $results[0];
 print_r($results->prize_num);
 if($results->prize_num<0){
DB::rollback();
 }else{
DB::commit();
 }
    }

public function test4(){
        $fp = fopen("/tmp/lock.txt",'a');
        #if(flock($fp,LOCK_EX)){
        if(flock($fp, LOCK_EX | LOCK_NB)) {
        $prize = Models\Prize_list::where('prize_id',1)->first();
        if($prize->prize_num>0){
        echo "ok";
        Models\Prize_zhong_list::create(
        [
        "uid"=>1,
        "mobile"=>"138****0731",
        "prize_id"=>1,
        "prize_name"=>"平板电脑",
        "addtime"=>time()
        ]
        );
        Models\Prize_list::where('prize_id',1)->decrement('prize_num');
        }
        }else{
          file_put_contents("log.txt","Couldn't lock the file!\r\n",FILE_APPEND);
        }
        fclose($fp);
}

public function test(){
$list = DB::table('prize_list')->where('prize_id', '=', 1)->sharedLock();
        $prize = Models\Prize_list::where('prize_id',1)->first();
        if($prize->prize_num>0){
        Models\Prize_list::where('prize_id',1)->decrement('prize_num');
        Models\Prize_zhong_list::create(
        [
        "uid"=>1,
        "mobile"=>"138****0731",
        "prize_id"=>1,
        "prize_name"=>"平板电脑",
        "addtime"=>time()
        ]
        );
        }
}

}

    A+
发布日期:2018年08月01日  所属分类:未分类

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: