thinkphp加鎖搶購商品

2021-10-03 10:59:35 字數 2492 閱讀 4349

<?php 

namespace service\controller;

use base\webbase;

class seckillcontroller extends webbase

$cond2 = array(

'idcard'=> $_post['idcard'],

'add_time' => array("egt",strtotime("-7 day"))

);$order = m('maskorders')->where($cond2)->find();

if ($order)

$postdata = array(

// 'name'=>$_post['name'],

// 'idcard'=>$_post['idcard'],

// 'lat'=>$_post['lat'] ,

// 'lon'=>$_post['lon'] ,

// 'sku'=>rand(100000,999999),

// 'add_time'=>time()

'name'=>"a".rand(100,999),

'idcard'=>rand(1000000,9999999),

'lat'=>1,

'lon'=>2,

'sku'=>rand(100000,999999),

'add_time'=>time()

);if (!$postdata['name'] || !$postdata['idcard' || !$postdata['lon'] || !$postdata['lat'])

$status =m('maskplans')->lock(true)->where(array('id'=>$plan['id']))->setinc('real_num');

if ($status)

}m()->rollback();//回滾

$this->weberror(self::this_action_error,"預約失敗!");

}/**

* 我的預約

*/$this->websuccess(self::output_success,"成功!",$re);

}$this->websuccess(self::output_success,"暫無資料!");

}/**

* 預約計畫列表

*/else

$item['starttime'] = date("y-m-d h:i:s",$item['starttime']);

$item['endtime'] = date("y-m-d h:i:s",$item['endtime']);

}$this->websuccess(self::output_success,"成功!",$lists);

}$this->websuccess(self::output_success,"暫無資料!");

}}/*

create table yixiang_maskorders(

`id` int(11) not null auto_increment primary key,

`name` varchar(255) not null comment "姓名",

`idcard` varchar(255) not null comment "身份證號",

`lat` varchar(255) not null comment "經度",

`lon` varchar(255) not null comment "緯度",

`sku` varchar(255) not null comment "編號",

`add_time` varchar(255) not null comment "搶購時間",

);create table yixiang_maskplans(

`id` int(11) not null auto_increment primary key,

`starttime` int(11) not null comment "計畫投放開始時間",

`endtime` int(11) not null comment "計畫投放結束時間",

`plan_locale` varchar(255) not null comment "地點",

`plan_num` int(11) not null comment "計畫發放量",

`real_num` int(11) not null comment "實際發放量"

);

使用ab測試:

效果應該如圖所示

多程序搶票不加鎖

code 檔案db的內容為 注意一定要用雙引號,不然json無法識別 併發執行,效率高,但競爭寫同一檔案,資料寫入錯亂 from multiprocessing import process,lock import time,json,random def search dic json.load ...

mysql自定義加鎖 為MySQL加鎖?

在日常操作中,update insert delete innodb會自動給涉及的資料集加排他鎖,一般的 select 一般是不加任何鎖的。我們可以使用以下方式顯示的為 select 加鎖。共享鎖 select from table name where id 10 lock in share mo...

atomic 加鎖操作

property atomic,strong nsstring name setter void setname name getter void name 為什麼加鎖 多執行緒的安全隱患 資源共享 一塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源 比如多個執行緒訪問同乙個物件 ...