84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
我有一个product表数据, 它会产生10个coupon, 我在product表的字段里存了coupon_count的字段为10, 如果抢红包的话根据coupon_count的剩余数来生成红包(抢红包coupon_count 减一)。
当1秒内并发上百的话, 会因为多个进程并发写入问题产生超过总是得红包。有什么方案可以解决这个问题?
web框架: flask
数据库: mongodb 3.2.6
使用orm框架: mongoengine
认证高级PHP讲师
會,mongodb沒有事務,不會鎖表,在你查詢數量到寫入的過程並非原子性的,所以高並發必然出問題。 建議修改資料和查詢接口,去適配一些mongodb的原子性操作來處理,例如先生成紅包,搶紅包時用findAndModify來查詢並同步修改紅包狀態。
使用 findAndModify()
會,mongodb沒有事務,不會鎖表,在你查詢數量到寫入的過程並非原子性的,所以高並發必然出問題。
建議修改資料和查詢接口,去適配一些mongodb的原子性操作來處理,例如先生成紅包,搶紅包時用findAndModify來查詢並同步修改紅包狀態。
使用 findAndModify()