天天看點

幂等性一、什麼是幂等性二、哪些情況需要防止三、什麼情況下需要幂等四、幂等解決方案

一、什麼是幂等性

接口幂等性就是使用者對于同一操作發起的一次請求或者多次請求的結果是一緻的,不會因為多次點選而産生了副作用。舉個最簡單的例子,那就是支付,使用者購買商品後支付,支付扣款成功,但是傳回結果的時候網絡異常,此時錢已經扣了,使用者再次點選按鈕,此時會進行第二次扣款,傳回結果成功,使用者查詢餘額返發現多扣錢了,流水記錄也變成了兩條.,這就沒有保證接口的幂等性

二、哪些情況需要防止

使用者多次點選按鈕

使用者回退頁面再次送出

微服務互相調用由于網絡問題,導緻請求失敗。feign觸發重試機制。

三、什麼情況下需要幂等

幂等的操作

查詢一次和查詢多次,在資料不變的情況下,查詢結果是一樣的。

更新一條資料的某個值(不包含運算操作),無論多少次最終結果都是一樣的

删除一次和多次删除都是把資料删除。

新增若根據資料的唯一主鍵插入,即使重複插入也隻會是一條資料

不幂等的操作

不帶主鍵的新增不是幂等的

更新一條資料的值,如減庫存操作不是幂等的

注:一個業務的一條sql運作兩次最後結果不一樣就不是幂等的(出現異常除外)

四、幂等解決方案

1.建立唯一索引,防止新增髒資料

當表存在唯一索引,并發時新增重複記錄就會報錯,那麼這時候就查詢已存在的記錄并傳回即可。

1.Token機制,防止頁面重複送出

幂等性一、什麼是幂等性二、哪些情況需要防止三、什麼情況下需要幂等四、幂等解決方案
幂等性一、什麼是幂等性二、哪些情況需要防止三、什麼情況下需要幂等四、幂等解決方案
幂等性一、什麼是幂等性二、哪些情況需要防止三、什麼情況下需要幂等四、幂等解決方案

2.各種鎖機制

資料庫悲觀鎖

幂等性一、什麼是幂等性二、哪些情況需要防止三、什麼情況下需要幂等四、幂等解決方案

資料庫樂觀鎖

幂等性一、什麼是幂等性二、哪些情況需要防止三、什麼情況下需要幂等四、幂等解決方案

業務層分布式鎖

幂等性一、什麼是幂等性二、哪些情況需要防止三、什麼情況下需要幂等四、幂等解決方案

3.各種唯一限制

資料庫的唯一限制

幂等性一、什麼是幂等性二、哪些情況需要防止三、什麼情況下需要幂等四、幂等解決方案

reids set防重

幂等性一、什麼是幂等性二、哪些情況需要防止三、什麼情況下需要幂等四、幂等解決方案

4.重複表

幂等性一、什麼是幂等性二、哪些情況需要防止三、什麼情況下需要幂等四、幂等解決方案

5.全局請求唯一id

幂等性一、什麼是幂等性二、哪些情況需要防止三、什麼情況下需要幂等四、幂等解決方案