项目中遇到并发问题和解决办法

时间:2021-10-26 08:56:09

最近在做一朋友帮砍价的活动。建立在微信公众号端的一个电商平台,然后我负责砍价模块。

由于这个模块高并发的几率比较大,所有有些逻辑模块就要采取一些缓存技术和排它锁的用户,

比如:由于项目需求是可以多个人同时砍价,我们又有砍到最低价格的限制,所以不进行处理的话很有可能就会超出我们所限制的价格!所以当用户砍价砍到最低价的时候就需要用到排它锁了 ,直接上代码:

 

 

 
//说明砍到最低价
$order_price = $res['bg_order_price']-$res['bg_floorprice'];
$file = BASE_DATA_PATH.'/lock/'.$res['bargain_id'];
$name = $this->deploy['prefix'].'bargain_'.$res['bargain_id'];
$is_hot = json_decode($this->redis->get($name),true);
if($is_hot['is_hot']==1){ //该活动属于爆款

if ($fp = fopen($file, 'w')) {
flock($fp, LOCK_EX);//加排它锁锁
//执行你的代码
$true_number = $this->true_hot_number($res['bargain_id']);
if($true_number < $is_hot['bg_store']){//判断是否被抢光
//没有被抢光写入砍到最低价时间
$this->table('bargain_order')->where(array('bg_order_id'=>$order_id,'bargain_id'=>$res['bargain_id']))->update(array('min_time'=>time()));
}
flock($fp, LOCK_UN);//解锁
fclose($fp);
}
}