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

2021-09-02 23:21:26 字數 591 閱讀 7547

利用資料庫是否更新驗證

新建乙個欄位version,每次更新的時候要求version都為0,更新後version加1,判斷更新是否成功來判斷是否重複提交。

基於快取資料狀態的驗證(讀取nosql資料需要時間,仍然會有重複)

將更新的id儲存到nosql中,判斷nosql中是否存在id 再更新。

利用資料庫唯一索引機制的驗證

新建一張表,業務id使用唯一索引,更新資料以前,將業務id插入該錶,如果成功,再執行更新操作。

基於資料庫的驗證(微小概率存在重複)

先查詢資料庫,驗證是否第一次操作,然後更新資料。注意查詢和更新之間不要做其他操作。

基於快取的計數器驗證(推薦)

由於資料庫的操作比較消耗效能,了解到redis的計數器也是原子性操作。果斷採用計數器。既可以提高效能,還不用儲存,而且能提公升qps的峰值。

還是以訂單退款為例子:

每次request進來則新建乙個以orderid為key的計數器,然後+1。

如果》1(不能獲得鎖): 說明有操作在進行,刪除。

如果=1(獲得鎖): 可以操作。

操作結束(刪除鎖):刪除這個計數器。

後端介面防止重複提交 確認收貨防止重複提交

1 在呼叫介面時候肯定會出現ab同事請求介面的問題,當時我在做訂單確認收貨時候就遇到了這種問題,所以我的解決辦法是加上鎖來解決,在這裡我選擇用lock 裡的reentrantlock 在使用者請求方法時候,獲取到使用者id,放入lock,這也同乙個介面如果是2個相同使用者ab同時確認收貨時候,先到先...

前後端分離重複提交 防止表單重複提交(二)

實現原理 1 頁面和後台同步存入乙個token,一旦重新整理頁面,此token都是會重新整理的 2 提交表單時,會帶上這個標識token 3 請求後台,將此token和後台存入的token比對 3.1 校驗token通過,成功提交表單,並移除token 3.2 校驗token不通過,給出前端提示,但...

Vue實現節流,防止重複提交

1 在methods中定義節流函式 desc 函式節流,規定在乙個單位時間內,只能觸發一次函式,如果這個單位時間內觸發多次函式,只有一次生效 典型的案例就是滑鼠不斷點選觸發,規定在n秒內多次點選只有一次生效。param func 函式 param wait 延遲執行毫秒數 throttle func...