鍍金池/ 問答/PHP/ 直播送禮接口應(yīng)該如何解決并發(fā)問題

直播送禮接口應(yīng)該如何解決并發(fā)問題

在直播APP中有給主播送禮物這樣一個(gè)場(chǎng)景,

大概的邏輯是:
1:判斷用戶禮物數(shù)量是否足夠
2:如果夠,則用戶禮物數(shù)量-1,增加主播的威望

遇到的問題:
在用戶刷禮物連擊,快速點(diǎn)擊送禮按鈕的時(shí)候,通常會(huì)遇到這種情況,在判斷禮物數(shù)量的時(shí)候,上一次送禮請(qǐng)求沒有完成,這時(shí)候,用戶禮物數(shù)量是夠的,然后過了這個(gè)判斷,上一次請(qǐng)求完成了,這時(shí)候仍要執(zhí)行扣除禮物數(shù)量的操作,這時(shí)候,禮物數(shù)量就變成了負(fù)數(shù)了。

請(qǐng)問,這種情況該如何防止禮物數(shù)量出現(xiàn)負(fù)數(shù)的情況。

回答
編輯回答
野橘

1.從前端講的話,希望你用promise,點(diǎn)了送禮后,讓按鈕灰掉等接口返回后再讓按鈕可用
2.從后端講你update的時(shí)候加個(gè)where number >0;他就不會(huì)成負(fù)數(shù)了,后面的update會(huì)失敗。

2017年4月4日 06:57
編輯回答
女流氓

如果我是你 , 我會(huì)考慮直接上redis , 有時(shí)候單線程的東西還是有很大好處的 .
其次 , 從你的應(yīng)用場(chǎng)景出發(fā) , 短時(shí)間多次點(diǎn)擊 , 簡直就是redis絕佳的用武之地 .
泥 , 還在考慮什么 ?

2017年9月10日 19:23
編輯回答
呆萌傻

這種情況后端應(yīng)該用消息隊(duì)列,或者加鎖策略,
前端可以在每次頁面打開時(shí)就把余量請(qǐng)求過來,避免展示負(fù)數(shù)

2017年1月27日 14:34
編輯回答
風(fēng)畔

隊(duì)列處理,并行轉(zhuǎn)為串行,這個(gè)時(shí)候判斷的禮物數(shù)量就是正確的

2018年3月4日 19:27