高併發提現問題記錄

2021-09-11 05:40:36 字數 610 閱讀 2835

如果單純的按照業務邏輯先查詢餘額再扣除餘額進行提現,請求少的時候不會有問題,一旦出現高併發或者使用者惡意提現,那麼就導致多次提現但是餘額只扣了很少。這是由於高併發環境下(操作同乙個使用者的資金)乙個執行緒進入讀取餘額100,還沒更新完餘額100-20,另乙個請求就進入讀取餘額100(應該是80),問題就出現了。所以解決方案是限制一次只能乙個執行緒操作。更為完善點,萬一一瞬間有10000條對同一使用者進行操作的請求到來,可以使用redis進行標記,加入有執行緒進入了,其它請求駁回。具體實現如下

jedis jedis = getjedis();

//0不占用 1占用

if (jedis.get(userid + "") == null || jedis.get(userid + "").equals("0")) else if (jedis.get(userid + "").equals("1")) else

synchronized (this)

}jedis.set(userid + "", "0");

redpackageutils.returnresource(jedis);

這是在**層面就行加鎖,也可以在資料庫層面進行控制。

select .. for update

全志A64出現的問題記錄

二.新增驅動 使用date檢視時間是utc時間而不是cst時間,正好差八個小時,解決如下 將ubuntu系統下面的 usr share zoneinfo asia shanghai檔案複製到開發板 etc下,並更名為localtime,執行hwclocks s。主要是hwclocks s,將它加入開...

ios crash問題記錄

1.誤將nsmutablearray型別的變數初始化為nsarray,結果對nsmutablearray型別變數進行操作時,crash h檔案如下 inte ce movemecontroller secondlevelviewcontroller property nonatomic,retain...

??? nginx lua問題記錄

問題1 當用http localhost test 訪問時,結果為何迥異?eg1 location test 結果為空,說明執行的是httpechomodule的echo指令,沒有執行httpluamodule的content by lua指令 eg2 location test輸出123 說明執行...