redis cluster模式下主从切换带来的问题

来源:7-2 交易验证优化

yidaimi

2020-03-08

老师,
你好!我想咨询一下扣减库存时,要是redis cluster进行主从切换的时候会不会发生超卖或者少卖的问题?
首先,我理解您代码中是使用原子性的incrby命令来完成更新和返回最新结果的动作的。我理解正常情况下即便是在cluster模式下,所有客户线程对于一个固定key的写操作都是在一个切片上的,所以原子性是不会有问题的。但是我这两天一直困惑于一些特殊情况:由于从切片从主切片上同步数据是异步的,所以如果进行秒杀活动时发生了切片的主从切换(主节点宕机),会不会造成超卖或者少卖?

假设有总库存6个,要是甲(买1个)、乙(买2个)、丙(买4个)三个人的请求甲和乙在主节点A上执行好了但是还没来得及复制到从节点B上(也就是甲和乙的扣减动作还未更新到从节点B上),这时候突然发生了主从切换,B节点升为主节点。,此时丙执行扣减动作是在B节点上的,会发现剩下库存还是6个而不是6-1-2=3个,会继续扣减库存,并且生成流水单。所以最后6个库存卖了7个。会不会出现这种超卖的现象?

另外,要是发生主从切换的时间点变为丙扣减发现库存<0并且加回了库存后,但是从节点只获取到了丙扣减库存的记录,但是没记录到丙加回库存的动作。这样会不会出现少卖?

老师,请问是不是有一定概率会出现这样的问题?要是出现的话一般是怎么处理的?

谢谢!

写回答

1回答

龙虾三少

2020-03-08

redis没办法保证事务性 只能让他不超卖

0
1
Code_Deli
老师,上面的问题好像是说,redis主从复制的延迟导致的超卖现象会不会发生
2021-07-04
共1条回复

聚焦Java性能优化 打造亿级流量秒杀系统(赠秒杀项目)

理解高流量电商网站性能构建思路 用高逼格技术解决性能提升问题

2174 学习 · 1009 问题

查看课程