答案是先下單再減庫存
以 MySQL 作為 DB 為例,下訂單就是 insert,在使用索引的情況下,insert 插入是行級鎖,支持每秒 4W 的並發。減庫存就是 update 操作,命中索引時也是行級鎖,但是這是個獨占鎖,所有的操作都要等待前一個釋放鎖后才能繼續 update。
問題就在這里,根據 MySQL 兩段鎖協議,我們應該把熱點操作放到離 commit 近的位置,這樣可以減少行級鎖的持有時間!自然處理效率就更好一些。
事務begin ---> insert ---> 其他操作 ---> update ---> 事務commit