接口冪等性
什么是接口冪等性?
簡(jiǎn)而言之即是 f(f(x))=f(x),一次執(zhí)行的結(jié)果和多次執(zhí)行的結(jié)果完全一致
最簡(jiǎn)單想到的實(shí)現(xiàn)接口冪等性(重復(fù)提交)的操作是什么?
1. 前端按鈕置灰
發(fā)起請(qǐng)求時(shí)置灰,等接口響應(yīng)成功后恢復(fù),可以屏蔽一大半小白用戶
2. 鎖
同步鎖synchronized這是最易想起的東西了,synchronized是鎖住某個(gè)變量或者某個(gè)方法或者是某個(gè)代碼塊,來保證解決多線程訪問臨界區(qū)造成的數(shù)據(jù)安全問題。synchronized鎖的是什么呢?它鎖住的是一個(gè)實(shí)例對(duì)象,假如每個(gè)線程都會(huì)重新產(chǎn)生新的實(shí)例對(duì)象,它只能鎖住單個(gè)線程,若系統(tǒng)存在負(fù)載均衡或者Spring管理的Bean,那么同步鎖就不起作用了
3. 分布式鎖(Redis)
利用setnx實(shí)現(xiàn),在set之前若存在則不set,否則則set,即是先占位的拿到鎖,等這個(gè)key過期或者刪除了釋放鎖。但是采用redis來做分布式鎖,若過期時(shí)間沒有得到控制,還得考慮redis掛掉了怎么處理,還要解鎖,最終會(huì)演變成死鎖等問題
最簡(jiǎn)單稍靠譜的解決方案是什么?
利用數(shù)據(jù)庫的唯一約束解決
public void save(String 某個(gè)字段1,String 某個(gè)字段2){
try{
insert(某個(gè)字段1,某個(gè)字段2);
}catch (Exception e){
e.printStackTrace();
throw new Exception ("已存在!");
}
}
對(duì)參數(shù)設(shè)置unique約束,若存在則拋異常
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。