冪等(idempotent、idempotence)是一個數學與計算機學概念,常見於抽象代數中。
在程式設計中一個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同
在專案遠端呼叫中,如果介面呼叫失敗或者是超時,客戶端都會採用重試請求,但是在客戶端重試的過程中都會導致伺服器服務處理出現【重複消費】;一般情況下,介面產生重複消費的原因有以下2種:
1、表單重複提交;
2、呼叫介面過程中失敗產生重試;
這時候介面呼叫就會產生了一個叫做冪等性的問題
對於查詢和刪除資料的場景都有天然的冪等性,那麼我們考慮冪等性處理更多是關注於新建資料與更新資料。
方法:
1、發起請求帶一個requestID傳入到介面;
2、Filter攔截後新增到Redis(分散式鎖),執行完成釋放;
3、伺服器接收請求時先判斷id是否正在處理中,如果有的話不能在執行業務邏輯,直接return 處理中;否則執行我們的業務邏輯,如果是後面在過來的話,根據業務判斷,返回已處理之類的;