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

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

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

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

 

 

 
//说明砍到最低价
                   $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);
                       }
                  }

  

posted @ 2017-08-18 16:55  还好l  阅读(1135)  评论(0编辑  收藏  举报