1. 程式人生 > >後端介面中實現重複提交驗證

後端介面中實現重複提交驗證

  1. 利用資料庫是否更新驗證
    新建一個欄位version,每次更新的時候要求version都為0,更新後version加1,判斷更新是否成功來判斷是否重複提交。

  2. 基於快取資料狀態的驗證(讀取nosql資料需要時間,仍然會有重複)
    將更新的ID儲存到nosql中,判斷nosql中是否存在ID 再更新。

  3. 利用資料庫唯一索引機制的驗證
    新建一張表,業務ID使用唯一索引,更新資料以前,將業務ID插入該表,如果成功,再執行更新操作。

  4. 基於資料庫的驗證(微小概率存在重複)
    先查詢資料庫,驗證是否第一次操作,然後更新資料。注意查詢和更新之間不要做其他操作。

  5. 基於快取的計數器驗證

    (推薦)
    由於資料庫的操作比較消耗效能,瞭解到redis的計數器也是原子性操作。果斷採用計數器。既可以提高效能,還不用儲存,而且能提升qps的峰值。
    還是以訂單退款為例子:
    每次request進來則新建一個以orderId為key的計數器,然後+1。
    如果>1(不能獲得鎖): 說明有操作在進行,刪除。
    如果=1(獲得鎖): 可以操作。
    操作結束(刪除鎖):刪除這個計數器。