码上敲享录 > mysql面试题 > 数据库悲观锁和乐观锁的原理和应用场景分别有什么?

数据库悲观锁和乐观锁的原理和应用场景分别有什么?

上一章章节目录下一章 2023-07-17已有162人阅读 评论(0)

悲观锁(Pessimistic Locking)原理:

- 悲观锁基于一种保守的策略,假设在并发环境中会发生冲突,所以在操作数据之前会先获取锁来阻止其他事务访问或修改数据。

- 在读取或修改数据之前,先尝试获取锁。如果无法获取锁,则需要等待直到锁被释放。

- 使用数据库的锁机制(如行级锁或表级锁)来实现悲观锁。例如,在MySQL中,可以使用SELECT ... FOR UPDATE语句获取悲观锁。


悲观锁的应用场景:

- 并发冲突较高的场景,即多个事务同时对同一数据进行读写操作的情况。

- 对数据的一致性要求较高,需要确保同时访问同一数据的事务顺序执行。


乐观锁(Optimistic Locking)原理:

- 乐观锁基于一种乐观的策略,假设在并发环境中冲突的概率较低,所以允许多个事务同时访问或修改数据,但在提交之前会检查数据是否被修改。

- 在读取数据时记录版本号(或时间戳)。

- 在提交事务时,检查记录的版本号是否与当前数据的版本号相匹配。如果不匹配,表示数据已被其他事务修改,此事务需要进行回滚或重试操作。


乐观锁的应用场景:

- 并发冲突较低的场景,即多个事务对同一数据进行读操作的情况较多,而写操作较少。

- 对数据的一致性要求相对较低,可以通过重试机制或回滚操作来解决冲突。


总结:

悲观锁采取保守的策略,在操作数据之前先获取锁,适用于多个事务同时对同一数据读写的高并发冲突情况;乐观锁采取乐观的策略,允许多个事务并发访问数据,但在提交之前检查数据是否被修改,适用于并发冲突较低的场景。选择悲观锁还是乐观锁取决于具体的应用场景,需要综合考虑并发冲突概率、数据一致性要求和性能等因素。


向大家推荐《Activiti工作流实战教程》:https://xiaozhuanlan.com/activiti
0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交