个人看法。 首先看你的意思是在缓存中进行库存扣减,把后续扣减数据库库存的动作写入到消息队列,之后消费者需要做库存校验和扣减数据库库存保证不超卖。 你把检验库存的逻辑放到消息队列重,那么本身一定会有滞后性的,缓存那边一直再扣不做校验的往消息队列写,等消费者那边校验到无库存的时候,你缓存那边已经超卖了很多了,这时是没办法回流的,你之后继续消费的消息全是超卖的消息,再抛出异常于事无补。 考虑把校验库存操作放到处理完缓存之后,之后对当前缓存的库存数加setnx🔒,保证只有一个线程能拿到🔒,同时这些锁只有在秒杀活动结束之后在释放,防止因为主从切换导致的超卖,或者把其他线程的锁給释放了。
2
牛客网
牛客企业服务