php 併發程式設計那點事(一)

2021-08-16 02:59:31 字數 663 閱讀 3084

在網際網路專案開發中,我們經常會用這樣一種方案去解決業務問題,就是查詢再判斷,比如電商中的購買商品,你先查詢當前使用者的餘額(平台餘額,不考慮直接第三方支付),然後再根據購買商品的單價和數量得出乙個購買總額,這樣如果餘額大於或等於購買總額,則生成購買訂單等等一系列業務邏輯操作,在這個過程中,如果一旦遇到併發操作,這個人通過非正常訪問,同時100個併發進行,那麼這100個請求同時執行查詢餘額的**(理論上),當然查詢的結果也會保持一致,這樣判斷也會全部通過,就會生成100個訂單,也會造成用一件商品的錢購買了多件商品。偽**如下(偽**隨便寫的,不要介意)

<?php

class product

// ............

}}

如何避免這些問題,假設我們沒有其它中介軟體,只有php+mysql,如何去解決呢?

我這邊給出的思路是:先查詢購買總額,然後用update user_account set account = account - $account where account>=$account and uid = $uid, 然後判斷受影響的行數,如果等於1 就生成資金凍結訂單,再生成購買訂單,當然購買訂單和凍結訂單應有外來鍵關係,這樣當購買失敗時(庫存不夠等異常),就可以將資金解凍回到使用者餘額。這裡偽**就不寫了。

希望對初學者有所幫助,寫的不好請諒解,如有錯誤請多多指教。

學習PHP那點事

對於今天這帖子,我也是醉了,本來打算做乙個安安穩穩的美男子來著,沒想到申請的賬號還不能發帖子,只能使用學校給的,這也沒法隱藏了,關於老師的爆料也是不敢說了。對於php110期剛開沒乙個月的班來說,我們都還太年輕,就是年齡大了,剛來那會,各種十幾歲的,見人都不敢問年齡了,尤其是還有一年齡大,長的年齡的...

訊號那點事(一)

訊號 訊號是軟體中斷。很多 較重要的應 程式都需處理訊號。訊號提供了 種處理非同步事件的 法。每個訊號都有 個名字。這些名字都以三個字元sig開頭。在linux系統中可以使用kill l命令來檢視系統支援的訊號。1 程序呼叫kill函式或使用kill命令傳送訊號給其他程序。2 系統核心異常產生的中斷...

程式設計中的命名設計那點事

在我開始設計系統的時候,我會花去很多時間去設計命名,因為好的命名和好的設計是分不開的。in the beginning was theword,and the word was with god,and the word was god 太初有道。道與神同在,道就是神。約翰福音第一章,第一節 在設計...