Go-SecKill icon indicating copy to clipboard operation
Go-SecKill copied to clipboard

Gin+Gorm+Redis+ETCD的秒杀系统,列举出一系列并发情况下数据竞争问题的解决方案。

Results 1 Go-SecKill issues
Sort by recently updated
recently updated
newest added

我在调用"api/v1/with-pcc-read"的时候,发现确实是超卖(准确的说,应该是少卖)的,这让我有点疑惑:事务中查询加排他锁理应不会出现超卖。当我读完源码并打印sql后,发现gorm的加锁方式 Set(gorm:query_option, for update) 并没有生效!所以我准备修改代码采用执行原生sql的方式再尝试,结果就是正确的了(没有超卖或少买的问题)。具体原因还没看,先反馈一下 ```golang func WithPccReadSecKillGoods(gid, userID int) error { tx := model.DB.Begin() skGood := model.PromotionSecKill{} tx.Debug().Raw("SELECT * FROM `promotion_sec_kill` WHERE goods_id= ? ORDER BY `promotion_sec_kill`.`ps_id` LIMIT 1...