訂單超賣問題是涉及到庫存項目的重中之重,這里我總結一下常用的方法
1、簡單處理【update & select 合並】(樂觀鎖)
beginTranse(開啟事務)
$num = 1; try{ $dbca->query('update s_store set amount = amount - $num where amount>=$num and postID = 12345'); }catch($e Exception){ rollBack(回滾) } commit(提交事務)
還有一種就是加版本號【先select 后 update】
$db->query('update s_store set amount = amount - $num,version = version+1 where version=$version and postID = 12345');
個人更推薦合並的那個
場景:適用於小型應用並發小
2、使用redis隊列
場景:大型應用高並發
總結:以上就是最常見的解決方案,當然也有其他的一些方式,看了后發現還是這兩種更合適,以上兩種方案足以解決正常的各種情況
