说一说博主遇到的问题,最近换了一家公司负责订单模块,看到之前写的库存扣减也是用redis思路实现,但是很容易就能看出破绽,以前没有做过电商起初的思考觉得是一个非常简单的功能吧,后面仔细想了一下深挖好像并没有想象的那么简单,就想思考出一种能够没有问题的思路,也参考了网上很多很多思路,可能思想性的东西谁也不...
场景 抢券,下单,库存扣减,使用redis库存扣减,然后在更新数据库,结果就导致redis库存扣减成功了,数据库更新失败或者redis下面的代码执行异常导致事务回滚,但是redis却没有回滚,就会导致,数据库库存数量没扣减,但是redis库存扣减了。 分析 需要从两个方面分析 要想保证缓存和数据库「实时」一致性 就需要解决两个问题 ...
付款减库存即买家下单后,并不立即减库存,而是等到有用户付款后才真正减库存,否则库存一直保留给其他买家。但因为付款时才减库存,如果并发比较高,有可能出现买家下单后付不了款的情况,因为可能商品已经被其他人买走了。 预扣库存这种方式相对复杂一些,买家下单后,库存为其保留一定的时间(如 10 分钟),超过这个时间,...
1.高并发场景下对库存扣减,会出现重复扣减问题,用synchronized解决不了。如下代码 synchronized (this){ int stock=Integer.parseInt(stringRedisTemplate.opsForValue().get("stock")); if(stock>0){ int realStock=stock-1; stringRedisTemplate.opsForValue().set("stock",realStock+""); System.out.println...