Skip to content

Latest commit

 

History

History
15 lines (12 loc) · 1.41 KB

数据库中乐观锁与悲观锁的区别.md

File metadata and controls

15 lines (12 loc) · 1.41 KB

悲观锁

  1. 策略:悲观锁假设冲突是常见的,因此在数据处理过程中(如读取或修改数据)会先锁定数据,防止其他事务对这些数据进行并发修改。
  2. 锁定行为:事务在访问数据时直接进行锁定,其他事务必须等待锁释放后才能对数据进行操作。
  3. 适用场景:适用于多事务竞争访问同一数据资源且冲突概率高的环境。
  4. 优点:在高冲突环境中可以保持数据的一致性。
  5. 缺点:可能降低并发性能,增加了死锁的可能性,同时锁定资源可能导致其他事务等待,影响系统的响应时间。

乐观锁

  1. 策略:乐观锁假设冲突较少发生,不会在事务开始时就锁定数据。而是在事务提交的时候检查在事务执行期间是否发生了冲突。
  2. 冲突检测:通常是通过数据版本号(如时间戳或者递增序列)来实现。在事务提交前,检查数据的版本号是否发生改变,如果改变了,表示有其他事务对数据进行了修改。
  3. 适用场景:适用于冲突概率低,读多写少的应用环境。
  4. 优点:提高了系统的并发性,因为大部分时间不需要锁定资源,减少了不必要的等待和锁竞争。
  5. 缺点:如果冲突发生,可能需要额外的重试逻辑处理,并且在高并发冲突环境中可能会降低性能。