冪等(idempotent)
一個冪等操作的特點是:任意多次所產生的影響均與一次執行的影響相同。
冪等函數,可以使用相同參數重複執行,並能獲得相同結果的函數。
實現冪等的技術方案:
-
查詢,select就是冪等操作
-
刪除
-
唯一索引,防止新增髒數據
-
token機制,防止頁面重複提交
-
悲觀鎖,解決併發事務的更新丟失問題
- 使用select … for update來執行(select * from employee where id = 1 for update; )
- 事務A使用悲觀鎖後,事務B再使用時將會被阻塞
- 使用commit可以解除阻塞
- 解除阻塞後,事務B可以看到事務A的修改
-
樂觀鎖,(邏輯實現,數據庫不提供支持)做法:版本號控制和時間戳控制(每次更新版本號變更)
- 樂觀鎖只是在更新數據那一刻鎖表,其他時間不鎖表,所以相對於悲觀鎖,效率更高
- 通過版本號實現 update table_xxx set name=#name#,version=version+1 where id=#id# and version=#version#
- 通過條件限制 update table_xxx set avai_amount=avai_amount-#subAmount# where id=#id# and avai_amount-#subAmount# >= 0
-
分佈式鎖
- 通過第三方系統redis或zookeeper,在業務系統插入或更新數據,獲取分佈式鎖,然後操作再釋放鎖。
-
狀態機冪等,有限狀態機