亞馬遜惹怒大批玩家:PS5明明有貨卻買不了
阿新 • • 發佈:2021-05-30
update tablename set version= version+1 where version=#{version}
1、什麼是冪等性?
一次請求或多次請求執行的結果是一樣的。
2、如何來實現冪等性
2.1 前端層面
在前端實現,按鈕一次點選後置灰不可用,禁止使用者多次點選;
2.2 資料庫層面
2.2.1 通過資料庫表的唯一索引來實現,當插入重複資料時資料庫會拋異常,從而避免了髒資料的插入;
2.2.2 通過樂觀鎖來實現,為資料庫表增加版本version欄位,更新前先去獲取version版本號,
select version from tablename wherexxx
更新時首先和版本號進行比對,版本號一致則更新,不一致則更新失敗。
update tablename set version = version+1 where version = #{version}
2.3 程式層面
2.3.1 通過悲觀鎖來實現,在獲取資料時進行加鎖,其他執行緒只能等該執行緒釋放鎖之後才能進行操作。
2.3.2 通過redis或zookeeper分散式鎖來實現,在分散式環境下,鎖定全域性唯一資源,使請求序列化;
2.3.3通過token機制來實現, token機制的核心思想是為每一次操作生成一個唯一性的憑證,也就是token。一個token在操作的每一個階段只有一次執行權,一旦執行成功則儲存執行結果。對重複的請求,返回同一個結果。
原文連結:https://juejin.cn/post/6894624582091669517