問題描述:用戶下訂單購買,因為各種原因(網絡卡,快遞點擊等)重復提交2個或者以上一模一樣的訂單,由於是同時提交的,第一個訂單執行扣款生成訂單未完成時候,第二個已經進來了,導致付一筆錢購買了2次或多次商品 解決方案:
1、緩存lock,緩存此用戶的操作行為,注意緊緊緩存操作的標志,下次進入判斷此標志是否存在,存在即不進入數據庫事務
2、應用程序application lock,和1相比,會阻塞其他用戶的正常行為
3、模仿銀行扣款機制,數據表建一個隨機唯一標志,每次請求帶上這個標志,操作的同時進行修改這個標志
4、應用程序生成唯一標志,數據庫做字段的唯一索引
5、扣款為負數的事務進行回滾
6、使用事務的隔離級別
7、使用redis的incr控制用戶的並發數,memcache的add也可以實現這種效果,memcached借助cas
