1. 程式人生 > >項目中遇到並發問題和解決辦法

項目中遇到並發問題和解決辦法

ice tor order 邏輯 file 技術 最低價 efi 微信

最近在做一朋友幫砍價的活動。建立在微信公眾號端的一個電商平臺,然後我負責砍價模塊。

由於這個模塊高並發的幾率比較大,所有有些邏輯模塊就要采取一些緩存技術和排它鎖的用戶,

比如:由於項目需求是可以多個人同時砍價,我們又有砍到最低價格的限制,所以不進行處理的話很有可能就會超出我們所限制的價格!所以當用戶砍價砍到最低價的時候就需要用到排它鎖了 ,直接上代碼:

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

  

項目中遇到並發問題和解決辦法