悲观锁、乐观锁

黎 浩然/ 11 7 月, 2022/ 数据库/DATABASE, 计算机/COMPUTER/ 0 comments

乐观锁和悲观锁是数据库管理和并发控制中两种常用的锁定策略,用于确保数据的一致性和完整性。它们的使用取决于对数据冲突发生的预期以及所需的性能效率。

悲观锁

悲观锁(Pessimistic Locking)基于这样的假设:冲突在并发环境中是常见的,因此最好通过锁定机制来防止其他事务在一个事务完成前对同一数据进行修改。悲观锁通常直接在数据库的锁管理器中实现。

特点

  • 直接锁定数据:在数据被读取或修改期间,悲观锁会锁定数据对象,阻止其他事务对这些对象的访问,直到锁被释放。
  • 防止数据修改:确保在数据操作期间,无其他事务可以修改或删除数据,从而避免数据冲突。
  • 可能引起阻塞和死锁:由于数据被锁定,其他需要访问这些数据的事务必须等待锁释放,这可能导致系统效率低下,并有可能发生死锁。

适用场景 悲观锁适用于写操作多、冲突概率高的环境,特别是在数据争用条件较多的场合。

乐观锁

乐观锁(Optimistic Locking)是一种更加灵活的锁定策略,它基于这样的假设:数据冲突在并发环境中相对罕见,因此可以在事务结束时检查是否存在冲突,而不是在开始时就锁定数据。

特点

  • 不立即锁定数据:乐观锁不会在数据读取时立即锁定,而是允许多个事务对数据进行预修改。
  • 使用数据版本控制:乐观锁通常通过数据版本号(versioning)或时间戳来实现。每次修改数据时,版本号增加。事务提交前检查版本号是否变化,如果变化了,表示其他事务已修改过数据,当前事务需要回滚。
  • 避免阻塞和死锁:因为不是通过锁来控制访问,所以不会引起事务阻塞和死锁的问题。

适用场景 乐观锁适用于读操作多、写操作少且冲突概率低的环境。

总结

悲观锁和乐观锁各有优缺点,选择哪一种锁策略取决于应用场景的具体需求。悲观锁更适合冲突频繁的环境,而乐观锁更适合冲突少,读多写少的场景。在设计系统时,理解并发模式和数据访问模式是选择合适锁策略的关键。

Share this Post

Leave a Comment

您的邮箱地址不会被公开。 必填项已用 * 标注

*
*