問題描述:用戶下訂單購買,由於各類緣由(網絡卡,快遞點擊等)重複提交2個或者以上如出一轍的訂單,因爲是同時提交的,第一個訂單執行扣款生成訂單未完成時候,第二個已經進來了,致使付一筆錢購買了2次或屢次商品 解決方案:redis
一、緩存lock,緩存此用戶的操做行爲,注意牢牢緩存操做的標誌,下次進入判斷此標誌是否存在,存在即不進入數據庫事務數據庫
二、應用程序application lock,和1相比,會阻塞其餘用戶的正常行爲緩存
三、模仿銀行扣款機制,數據表建一個隨機惟一標誌,每次請求帶上這個標誌,操做的同時進行修改這個標誌網絡
四、應用程序生成惟一標誌,數據庫作字段的惟一索引併發
五、扣款爲負數的事務進行回滾app
六、使用事務的隔離級別memcached
七、使用redis的incr控制用戶的併發數,memcache的add也能夠實現這種效果,memcached藉助cas索引