91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis中怎么防止搶購商品超賣

發布時間:2021-07-21 11:26:01 來源:億速云 閱讀:182 作者:Leah 欄目:大數據

本篇文章為大家展示了redis中怎么防止搶購商品超賣,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

  • 使用redis的list進行測試

    思路是設置一個redis列表List,假設有十個商品,每次請求先判斷List的長度,小于十就能搶到商品,將用戶信息存放到List中。代碼如下

 //進行搶購    protected function way_list(){$num = $this->redis->lLen();if($this->redis->lLen()>=self::AMOUNTLIMIT){$this->writeLog("搶購失敗".$num);return;}else{$this->redis->rPush($num);$this->writeLog("搶購成功".$num);}}

結果:失敗!

redis中怎么防止搶購商品超賣

可以很明顯數量不對順序也不對。

分析了下原因,在代碼執行時,多用戶并發請求時,第一個用戶判斷List長度符合條件還未進行List寫入時,第二個用戶也通過了List長度判斷。所以就導致執行失敗。

這就沒有利用到redis的原子性

所以進行了改良

  • 使用redis 的incrby。incrby將制定key 的值增加指定的增量,并返回增量后的值。是一個原子性操作。所謂的原子性操作就是執行該方法后要嘛成功要嘛失敗。

思路就是設置一個鍵值對存放被搶購數量,每次一個用戶進來就將該值加一進行判斷,如果小于搶購的商品數量則搶購成功,否則失敗。代碼如下

 protected function way_string(){//判斷是否有初始化        if(!$this->redis->exists(self::sold_name)){$this->redis->setnx(self::sold_name,0);}if($this->redis->incrby(self::sold_name,1) > self::AMOUNTLIMIT){$this->writeLog('失敗');}else{$this->writeLog('成功');}}

結果

redis中怎么防止搶購商品超賣

壓力測試了幾次都沒有出現問題

redis中怎么防止搶購商品超賣

通過apache自帶的ab壓力測試,進行五百次連接請求,并發三百次,沒有出現超賣行為。

總結:會出現超賣主要是由于用戶在請求的時候,代碼在執行是有先后,會導致執行結果不符合預期。而采用redis的原子性就能避免。

上述內容就是redis中怎么防止搶購商品超賣,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

孟连| 隆回县| 图木舒克市| 沾益县| 昂仁县| 海兴县| 黑河市| 科技| 水城县| 登封市| 嘉兴市| 林周县| 信丰县| 台南县| 尚志市| 沅江市| 府谷县| 武义县| 庆云县| 拉孜县| 同心县| 教育| 翁牛特旗| 安乡县| 新余市| 淄博市| 襄城县| 七台河市| 吉林市| 台北市| 当雄县| 德安县| 稷山县| 若羌县| 卫辉市| 漳浦县| 府谷县| 龙岩市| 亚东县| 扎兰屯市| 宾阳县|