如何防止訂單重復(fù)提交以及如何防止訂單重復(fù)確認(rèn)

訂單重復(fù)問題已經(jīng)是老生常談的問題了卓嫂,我們熟悉的淘寶購物流程榔昔,購物車-->生成訂單--》提交訂單--》訂單確認(rèn)--》支付訂單--》備貨--》發(fā)貨,這里可能會(huì)有一些問題定硝,例如皿桑,有人惡意或者無意的重復(fù)提交訂單,從而導(dǎo)致數(shù)據(jù)庫保存的訂單數(shù)量與實(shí)際不符蔬啡,重復(fù)提交訂單導(dǎo)致用戶體驗(yàn)不佳诲侮,甚至更為嚴(yán)重的是,用戶重復(fù)支付了同一個(gè)訂單箱蟆。所以沟绪,涉及到訂單,應(yīng)該首先想清楚如何設(shè)計(jì)才能保證系統(tǒng)不會(huì)出現(xiàn)這些問題

如何防止訂單重復(fù)提交

首先說兩個(gè)我們購物時(shí)經(jīng)常有過的體驗(yàn)或者說購物網(wǎng)站的網(wǎng)頁提醒

  • 你提交的動(dòng)作過快空猜,請(qǐng)稍后嘗試
  • 你的訂單已經(jīng)超時(shí)绽慈,請(qǐng)刷新頁面后重新提交
    看到這些提示,說明該購物網(wǎng)站做了訂單提交的限制辈毯,一方面是防止有人惡意無限制提交訂單坝疼,所以限制了一定時(shí)間內(nèi)最大可操作次數(shù),另一方面是為了保證訂單無重復(fù)提交谆沃。那么這是怎么做到的呢钝凶?
    第一個(gè)應(yīng)該比較簡(jiǎn)單,限制某個(gè)時(shí)間內(nèi)的最大操作次數(shù)只需要有一個(gè)計(jì)數(shù)器就可以唁影,計(jì)數(shù)器可以用redis實(shí)現(xiàn)耕陷,設(shè)置一個(gè)帶有有效時(shí)間的值作為計(jì)數(shù)器,如果值不存在則自動(dòng)創(chuàng)建据沈,超過某一個(gè)值就認(rèn)為操作次數(shù)用完即可以實(shí)現(xiàn)啃炸。
    第二個(gè)可以使用token機(jī)制,token即令牌卓舵,學(xué)過spring security的相信對(duì)這個(gè)詞不會(huì)陌生南用。我們可以使用類似spring security的機(jī)制在頁面上生成一個(gè)token,當(dāng)提交訂單時(shí),根據(jù)該token的有效時(shí)間和允許的使用次數(shù)來判斷訂單是否允許提交裹虫,從而規(guī)避重復(fù)提交的問題肿嘲。當(dāng)然,有人會(huì)問筑公,在高并發(fā)的情況下雳窟,如果是判斷token有效之前有很多同一個(gè)用戶的提交線程過來(用戶正常使用一般不會(huì)出現(xiàn)這種情況,一般是壓力測(cè)試工具導(dǎo)致的)匣屡,那么還是會(huì)重復(fù)提交封救,所以,這里需要用到鎖機(jī)制捣作,訪問同一個(gè)用戶的token同一時(shí)間只能有一個(gè)線程誉结,token使用之后失效了就會(huì)被清掉,之后的線程就找不到該token券躁,從而認(rèn)為訂單不能提交惩坑。

訂單確認(rèn)支付

如支付寶和微信等,支付寶和微信本身是怎么限制訂單只能支付一次的呢也拜?訂單怎么保證只會(huì)被支付一次呢以舒?這個(gè)問題相對(duì)來說就簡(jiǎn)單很多了,同一訂單的狀態(tài)更新的SQL只需要帶上條件慢哈,利用的是數(shù)據(jù)庫的行鎖蔓钟。當(dāng)然,如果是分布式系統(tǒng)卵贱,這里涉及到的問題會(huì)更多滥沫。

update table item set item.status=:newstatus where item.id = :id and item.status = oldstatus.

對(duì)比案例

  • 美團(tuán)GTIS
    主要看GTIS的流程圖以及想想其交易ID的作用,交易之前艰赞,后臺(tái)會(huì)返回一個(gè)交易ID給前端佣谐,前端在點(diǎn)擊交易按鈕時(shí)需將該交易ID和其他交易信息同時(shí)返回給后臺(tái)進(jìn)行處理肚吏,通過全局的交易ID實(shí)現(xiàn)“該次交易的”冪等性

    image

參考資料和研究

  • 分布式鎖的對(duì)比分析:非常好的一篇文章方妖,包含下面的關(guān)鍵詞:可重入、阻塞罚攀、公平党觅、排他、樂觀斋泄、悲觀杯瞻、單點(diǎn)、死鎖發(fā)生炫掐、連接池狀況魁莉、實(shí)現(xiàn)種類、實(shí)現(xiàn)方式

轉(zhuǎn)載:http://www.reibang.com/p/530228b71888

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市旗唁,隨后出現(xiàn)的幾起案子畦浓,更是在濱河造成了極大的恐慌,老刑警劉巖检疫,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讶请,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡屎媳,警方通過查閱死者的電腦和手機(jī)夺溢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烛谊,“玉大人风响,你說我怎么就攤上這事∩估矗” “怎么了钞诡?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)湃崩。 經(jīng)常有香客問我荧降,道長(zhǎng),這世上最難降的妖魔是什么攒读? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任朵诫,我火速辦了婚禮,結(jié)果婚禮上薄扁,老公的妹妹穿的比我還像新娘剪返。我一直安慰自己,他們只是感情好邓梅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布脱盲。 她就那樣靜靜地躺著,像睡著了一般日缨。 火紅的嫁衣襯著肌膚如雪钱反。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天匣距,我揣著相機(jī)與錄音面哥,去河邊找鬼。 笑死毅待,一個(gè)胖子當(dāng)著我的面吹牛尚卫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尸红,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼吱涉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼刹泄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起怎爵,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤循签,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后疙咸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體县匠,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年撒轮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乞旦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡题山,死狀恐怖兰粉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情顶瞳,我是刑警寧澤玖姑,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站慨菱,受9級(jí)特大地震影響焰络,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜符喝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一闪彼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧协饲,春花似錦畏腕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至而线,卻和暖如春铭污,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吞获。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工况凉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谚鄙,地道東北人各拷。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像闷营,于是被迫代替她去往敵國和親烤黍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子知市,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容