冪等性問題

SuperLBY發表於2020-12-14

【*】什麼是冪等性

首先冪等性是數學中的概念:一個函式執行多次,返回結果相同就達到了冪等性的要求 f(f(x)) = f(x)

【*】軟體開發中的冪等性

  • 什麼情況下會產生冪等性

在業務上對某一事件進行多次處理,但是預期只想處理一次,例如支付過程中,購買一件商品,由於網路原因第一次沒有支付成功,使用者又重新整理進行重複請求,此時使用者的主觀想法當然不是想要購買多次,此時如果發生了兩次扣款,就產生了冪等性的問題。

  • 在CURD過程當中的冪等性
    • select和delete:查詢天然支援冪等
    • update:可能不冪等,也可能冪等
      • 冪等:修改的最終值固定,例如進行狀態修改,將可用的狀態修改成不可用,進行多次修改,結果都是由可用變成不可用
      • 不冪等:修改的最終值不固定,例如支付扣款,賬戶餘額1000元,購買了200元的商品,餘額就是1000-200,發生多次就變成了重複扣款
    • insert:天然不冪等
      • 多次新增必然會每次資料都會變多,必然結果發生了變化,所以不冪等

【*】冪等性問題怎樣解決

  • 唯一索引

新建一張去重表,裡面可以只放一個唯一索引欄位

例如訂單冪等性:不能重複生成訂單,訂單號可以使用一些特定的規則進行生成(注意保證訂生成單號的唯一性),新建一張表,只儲存訂單號,並將其設定為唯一索引,生成訂單方法,在真正呼叫生成訂單的業務邏輯之前,需要首先在訂單去重表中,

  • 狀態標識
  • 版本號
  • token令牌

相關文章