其实我觉得本身使用redis作为库存的预扣减操作就可能会出现超卖的现象,想要彻底的解决这个问题的话最好还是放在数据库层面执行上(因为我们的实际库存的操作是要以数据库为准的),所以当数据的库存扣减操作出现非正常值的时候需要调用订单的取消接口,主动取消这个超卖的订单。 还有就是重复下单问题,这个问题的本质其实就是需要区别是用户的不小心重复下单还是真的想要购买多个相同商品,最简单的就是前端针对同一个商品的下单接口在5s内只能进行一次调用,或者说我们在redis中设置一个userID+spu_id的分布式锁,执行一个lua脚本实现放置重复下单的操作(先去判断锁是否存在?不存在的话就执行库存的预扣减操作,并设置一个过期时间为5s的锁,如果存在的话直接返回,判断为重复下单)
点赞 4
牛客网
牛客网在线编程
牛客网题解
牛客企业服务