https://blog.csdn.net/qq_39291929/article/details/81429275(主內(nèi)容)
http://www.reibang.com/p/25f4b64e2068(token機(jī)制)
概念:對其任意次數(shù)的操作結(jié)果與一次操作的結(jié)果相同(不用擔(dān)心重復(fù)執(zhí)行會(huì)對系統(tǒng)造成改變)
業(yè)務(wù)場景:
1.綁定銀行卡發(fā)送短信接口着撩。如果APP重復(fù)點(diǎn)擊調(diào)用后臺接口鼎姊,后臺重復(fù)調(diào)用第三方接口挣输,造成用戶收到多條短信扬蕊,一般情況下控制在60s內(nèi)再重發(fā)短信捅暴,如果不做控制妖胀,每一次調(diào)用第三方接口都會(huì)收費(fèi)葛闷。
2.創(chuàng)建訂單接口放案。如果APP端因網(wǎng)絡(luò)問題用戶重復(fù)點(diǎn)擊多次皆尔,會(huì)生成多個(gè)訂單號呐舔,會(huì)造成系統(tǒng)業(yè)務(wù)問題。
解決方案:
冪等性解決方案
1.數(shù)據(jù)庫表加唯一索引慷蠕,防止新增臟數(shù)據(jù)珊拼。比如對訂單號進(jìn)行加唯一索引,防止生成重復(fù)訂單流炕。
如果不加索引的后果是:當(dāng)根據(jù)訂單號去支付澎现,支付表生成兩條重復(fù)的訂單號仅胞,然后去支付寶、微信剑辫、易寶支付去支付干旧,付款完成后,第三方異步回調(diào)接口妹蔽,本地接口首先根據(jù)訂單號查詢實(shí)體椎眯,發(fā)現(xiàn)查詢到兩條,系統(tǒng)就會(huì)拋出異常胳岂。
2.分布式鎖
利用redis编整,在業(yè)務(wù)系統(tǒng)插入數(shù)據(jù)或者更新數(shù)據(jù),獲取分布式鎖乳丰,然后做操作掌测,之后釋放鎖,這樣其實(shí)是把多線程并發(fā)的鎖的思路
3.token機(jī)制成艘,防止重復(fù)提交
(1). 數(shù)據(jù)提交前要向服務(wù)的申請token赏半,token放到redis中贺归,token有效時(shí)間
(2). 提交后后臺校驗(yàn)token淆两,同時(shí)刪除token,生成新的token返回(http://www.reibang.com/p/25f4b64e2068)