在開發小程序紅包 和公眾號發紅包
首先是商家端 可以發紅包 用戶來搶紅包
搶到的紅包 我們先存在他的帳號下 然后這個用戶再申請提現
好了,現在開始來問題了。那就是大並發的用戶提現問題了。
部分用戶頻繁提現,不停的刷接口。
舉例來說吧,假使小黑他自己發3元錢紅包,然后他自己搶,搶到以后,我們把他的錢存在一個字段里,等待他來提現。
現在問題就在這里了,他使用一些抓包軟件,在同一秒鍾發送數十次請求提現。這個時候我們程序是怎么執行的呢?
1.獲取小黑的提現申請,比如3元,在數據庫里查這個小黑賬戶里是否有3元錢,發現有,就讓他提現。如果不足3元就不允許他提現。
一切看起來好像天衣無縫。結果沒想到小黑不停的刷紅包接口。賬戶里的錢,白白的就消失了。。。看着讓人心疼啊。
這一切是什么原因呢?
原來問題就是出在小黑在一秒鍾之內,發起的數十次請求,我們知道一秒鍾是1000毫秒。
假使小黑發起10次請求
也就是第一請求在 第1毫秒
第二次發起的請求在第101毫秒
第三次發起請求在第201毫秒
第四次發起的請求在第301毫秒
第五次發起的請求在第401毫秒
以此類推。。。。。。
那我們的數據庫和服務器有關系,也許返回的結果沒那么快。
假設我們從接到小黑的第一次請求到查詢小黑的賬戶余額還有多少錢,然后程序來判斷能不能讓他提現走這3元。假設這中間需要320毫秒。
那么也就是說第一次,第二次,第三次,第四次這四次的請求,程序都判斷他賬戶里還有3元錢,都讓他提現走了。。。。
這下小黑一下就拿走了4*3=12元。
所以問題就在這里了。
那么我們就要對每次的請求做好相應的記錄,標記每次請求的唯一性,不讓這樣的情況發生。
我,秋峰,phper,目前自創業,做項目系統開發,php后端加小程序前端結合 今天就給大家分享到這里,希望對大家有所幫助。歡迎交流 大家相互學習 共同提高 我的 微信號:qiufeng2999