某一商品庫存數為100 兩個人同時讀取到了數量 A添加10 為110 B減20 應為90數據上下文中A的Quantity+=10(110); B的Quantity-=20(80)在ef框架下 提交的后臺的sql語句 update quantity=A的Quantity(110) update Quantity=B的Quantity(80) 導致庫存不準確 如果在讀取商品庫存數時加鎖 A讀取完后并沒有提交操作(或者提交后延遲很大) 其他用戶讀取這個商品或者操作其他數據時 會等待時間較長 有可能出現超時查了許多資料 樂觀鎖 悲觀鎖 滿足不了要求 有沒有大神 給解答下 給個其他的思路
1 回答

搖曳的薔薇
TA貢獻1793條經驗 獲得超6個贊
樂觀鎖 可以解決這種問題 ,B提交時會拋出錯誤,catch 住 重試,但是在高并發下并不是好的解決方案。在高并發下一種是直接用sql 語句 去 update ,這樣就不存在 使用 ef 更新實體(分為兩步,先獲取,在修改)這種情況了,在更高的并發下可以考慮緩存庫存數據,并保證更新操作的順序是對的就可以了
添加回答
舉報
0/150
提交
取消