項目中遇到並發問題和解決辦法
阿新 • • 發佈:2017-08-18
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); } }
項目中遇到並發問題和解決辦法