【转载】超卖、库存问题

在做秒杀类的程序时,最常见的就是超卖问题。产生原因如下:

解决方法

  • 使用 Redis,可提升速度
  • 对数据进行限制,可采取乐观锁、悲观锁或 lua 脚本

悲观锁与乐观锁

可参见:https://zhuanlan.zhihu.com/p/31537871

悲观锁是基于一种悲观的态度类来防止一切数据冲突,它是以一种预防的姿态在修改数据之前把数据锁住,然后再对数据进行读写,在它释放锁之前任何人都不能对其数据进行操作,直到前面一个人把锁释放后下一个人数据加锁才可对数据进行加锁,然后才可以对数据进行操作,一般数据库本身锁的机制都是基于悲观锁的机制实现的。

乐观锁是一种并发类型的锁,其本身不对数据进行加锁通而是通过业务实现锁的功能,不对数据进行加锁就意味着允许多个请求同时访问数据,同时也省掉了对数据加锁和解锁的过程,这种方式因为节省了悲观锁加锁的操作,所以可以一定程度的的提高操作的性能,不过在并发非常高的情况下,会导致大量的请求冲突,冲突导致大部分操作无功而返而浪费资源,所以在高并发的场景下,乐观锁的性能却反而不如悲观锁。
乐观锁:写数据时再去检测有无发生冲突。
乐观锁执行流程:

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注