1. 程式人生 > 遊戲 >亞馬遜惹怒大批玩家:PS5明明有貨卻買不了

亞馬遜惹怒大批玩家:PS5明明有貨卻買不了

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 where
xxx

   更新時首先和版本號進行比對,版本號一致則更新,不一致則更新失敗。

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