這篇文章,寫的很詳細了。
探討一下實現冪等性的幾種方式
本質:
利用數據庫的樂觀鎖,悲觀鎖,唯一約束。
總結:
1、第一種方案,利用數據庫的樂觀鎖機制
(update t_order set status = 1 where order_id = trade_no and status = 0 ,判斷狀態。這種思想類似CAS操作,如果符合我的預期值,我就干。)
2、第二種方案,利用數據庫的悲觀鎖機制
(使用 for update,行級鎖,優點:設計簡單。缺點:如果多個實例,多個線程進來,只有一個線程獲取鎖,其他線程處於等待狀態。影響並發性能)
3、第三種方案,新建一張表,建立唯一索引。
(優點:設計簡單。缺點:如果業務變大,這張表會成為性能的瓶頸)
按照最優排序:樂觀鎖 > 唯一約束 > 悲觀鎖