概念
我們實際系統中有很多操作,是不管做多少次,都應該產生一樣的效果或返回一樣的結果。
例如:前端重復提交選中的數據,應該后台只產生對應這個數據的一個反應結果。等等很多重要的情況,這些邏輯都需要冪等的特性來支持。
實現方案
- 數據庫唯一索引,防止新增臟數據。
- token機制,防止重復提交。
數據提交前要向服務的申請token,token放到redis,token有效時間 提交后后台校驗token,同時刪除token,生成新的token返回。 - 數據庫悲觀鎖。
select * from account where name=”xxx” for update
- 數據庫樂觀鎖。
update account set price=100,version=2 where version=1
- 分布式鎖
zookeeper或者redis都可實現。 - 對外第三方api。一般要求提供唯一字段組成唯一索引。
https://juejin.im/entry/57fec6850e3dd90057e1e47e