如何用ThinkPHP6结合MySQL悲观锁有效避免商品超卖问题?

2026-04-06 07:410阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1288个文字,预计阅读时间需要6分钟。

如何用ThinkPHP6结合MySQL悲观锁有效避免商品超卖问题?

《观测锁介绍(百科学)》:观测锁,顾名思义,是指对数据的一种锁机制。它指的是对数据被外部环境(包括系统当前的其他事务以及来自外部系统的处理)访问时的一种保护方式。通过观测锁,可以保持数据的稳定性,避免在数据处理过程中出现不一致的情况。因此,在整个数据处理过程中,观测锁的作用是确保数据在修改和访问时保持一致性和安全性。

悲观锁介绍(百科):

悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。

使用场景举例:以MySQL InnoDB为例

商品goods表,假设商品的id为1,购买数量为1,status为1表示上架中,2表示下架。现在用户购买此商品,在不是高并发的情况下处理逻辑是:

  • 查找此商品的信息;
  • 检查商品库存是否大于购买数量;
  • 修改商品库存和销量;

上面这种场景在高并发访问的情况下很可能会出现问题。如果商品库存是100个,高并发的情况下可能会有1000个同时访问,在到达第2步的时候,都会检测通过。这样会出现商品库存是-900个的情况。

阅读全文

本文共计1288个文字,预计阅读时间需要6分钟。

如何用ThinkPHP6结合MySQL悲观锁有效避免商品超卖问题?

《观测锁介绍(百科学)》:观测锁,顾名思义,是指对数据的一种锁机制。它指的是对数据被外部环境(包括系统当前的其他事务以及来自外部系统的处理)访问时的一种保护方式。通过观测锁,可以保持数据的稳定性,避免在数据处理过程中出现不一致的情况。因此,在整个数据处理过程中,观测锁的作用是确保数据在修改和访问时保持一致性和安全性。

悲观锁介绍(百科):

悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。

使用场景举例:以MySQL InnoDB为例

商品goods表,假设商品的id为1,购买数量为1,status为1表示上架中,2表示下架。现在用户购买此商品,在不是高并发的情况下处理逻辑是:

  • 查找此商品的信息;
  • 检查商品库存是否大于购买数量;
  • 修改商品库存和销量;

上面这种场景在高并发访问的情况下很可能会出现问题。如果商品库存是100个,高并发的情况下可能会有1000个同时访问,在到达第2步的时候,都会检测通过。这样会出现商品库存是-900个的情况。

阅读全文