冪等這個詞最初是用到數學,通俗的講就是一個狀態在一次變化和N次變化的結果是一樣的,即無視次數,簡單的說就是呼叫一次和呼叫N次的結果一定是一樣的,這才叫冪等性,
冪等產生的原因:
- 網路抖動:客戶端發送寫請求,請求已經達到了服務端,但是服務端在回傳回應資訊時出現了網路問題,客戶端沒收到回應,于是發起了重試,
- 重試功能:使用微服務框架,開啟了重試功能,
- 表單重復提交
一、表單提交問題
可以使用token機制
二、insert介面
可以設定唯一約束
三、update介面
非冪等產生問題的場景:
- 客戶端A,調服務端B的 update介面 將資料修改為:update person set name="張三" where id=1001;
- 客戶端B,調服務端B的 update介面 將資料修改為:update person set name="李四" where id=1001;
- 客戶端A,由于沒有收到反饋于是發起了重試,update person set name="張三" where id=1001;
顯然這樣的結果不是我們想看見的,對于這樣的問題我們可以采用樂觀鎖處理:
- 客戶端A,調服務端B的 update介面 將資料修改為:update person set name="張三" ,version=2 where id=1001 and version=1;
- 客戶端B,調服務端B的 update介面 將資料修改為:update person set name="李四" ,version=3 where id=1001 and version=2;
- 客戶端A,由于沒有收到反饋于是發起了重試,update person set name="張三" ,version=2 where id=1001 and version=1;顯然這條資料不能處理成功,有效避免了資料被重復修改問題,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/277968.html
標籤:Java
