increment是应该是原子操作吧

来源:4-4 Redis解决超卖问题

慕仔8930017

2021-03-16

图片描述

老师您好,这里我不同意您说的increment实际是先查后扣。我记得increment本身是原子性的操作。
这里您出现库存多扣的原因应该是先扣库存,再判断count < 0 这两步不是原子性的,所以在高并发下才出现库存扣为负数。
这里只需要在 count <0 的时候把扣掉的库存再increment回去,然后再抛出异常。应该就可以解决库存超扣的问题。
以上仅是我的个人想法,有不对的地方还请老师指正。

写回答

1回答

InCowboy

2021-03-17

是的,这里口误了,我的意思就是在业务层面扣库存和库存的判断会出现并发情况,然后把它放到lua脚本就可以避免,你说的count<0在还回去如果是在业务层面的话应该还是有问题,没有解决高并发问题,你可以试试看哈

0
6
WittChen
回复
InCowboy
个人感觉只要保证数据库中的订单,库存正常就好了,Redis只是一个防超卖的工具如果完成了甚至可以删除这个key了,因为已经没有用了已经完成了他的职责,如果是热点数据,查一次再设置上去就好了
2022-10-15
共6条回复

高级Redis进阶课 解决Redis实际问题+掌握Redis6.x特性

以项目整合Redis各种场景,从此轻松应对各类Redis难题

934 学习 · 353 问题

查看课程