1、减库存不能加悲观锁,
2、在sql里判断类似乐观锁但是会使数据库压力变大,
3、先从redis获取商品库存并判断是否减库存,减完库存刷新redis,但是线程上的安全问题,当线程很多、高并发时,有可能引发超卖问题
4、 分布式锁也可以锁在商品上,单个商品串行,多个商品并行。
5、更好的办法是,redis本来就是单线程的,所以可以考虑把“检查库存-扣减库存-返回结果”的动作写成lua脚本去调用,一个调用就能原子化地操作库存了
1、减库存不能加悲观锁,
2、在sql里判断类似乐观锁但是会使数据库压力变大,
3、先从redis获取商品库存并判断是否减库存,减完库存刷新redis,但是线程上的安全问题,当线程很多、高并发时,有可能引发超卖问题
4、 分布式锁也可以锁在商品上,单个商品串行,多个商品并行。
5、更好的办法是,redis本来就是单线程的,所以可以考虑把“检查库存-扣减库存-返回结果”的动作写成lua脚本去调用,一个调用就能原子化地操作库存了