最近在做一朋友帮砍价的活动。建立在微信公众号端的一个电商平台,然后我负责砍价模块。
由于这个模块高并发的几率比较大,所有有些逻辑模块就要采取一些缓存技术和排它锁的用户,
比如:由于项目需求是可以多个人同时砍价,我们又有砍到最低价格的限制,所以不进行处理的话很有可能就会超出我们所限制的价格!所以当用户砍价砍到最低价的时候就需要用到排它锁了 ,直接上代码:
//说明砍到最低价 $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); } }
时间: 2024-11-07 04:07:07