乐观锁or悲观锁

195 阅读3分钟

乐观锁和悲观锁是两种处理并发数据访问的策略,它们就像对待生活的两种不同态度一样,各有特点和适用场景.

乐观锁

乐观锁就像一个乐观的人,总是相信事情会朝着好的方向发展,不会轻易担心会发生不好的事情。在数据库操作中,乐观锁假设数据在操作过程中被其他事务修改的可能性很小,因此在操作过程中不会主动加锁,而是等到最后提交更新时再检查是否有冲突发生.

优点:

积极向上:由于在操作过程中不需要加锁,多个事务可以同时进行,就像一群乐观的人一起工作,互相鼓励,提高了系统的并发性能. 节省资源:避免了锁的获取和释放开销,就像乐观的人不会浪费时间去担心那些不太可能发生的事情,降低了系统的资源消耗.

缺点:

冲突处理复杂:当发生冲突时,需要进行冲突检测和处理,就像乐观的人在遇到困难时需要花更多的时间去解决问题,增加了程序的复杂性. 适用场景有限:乐观锁适用于冲突发生的概率较低的场景,就像乐观的人在面对不太可能发生的问题时会更加得心应手,但如果问题频繁发生,乐观锁可能就不那么有效了.

悲观锁

悲观锁就像一个悲观的人,总是担心事情会朝着不好的方向发展,因此在操作过程中会采取预防措施,避免潜在的问题发生。在数据库操作中,悲观锁假设数据在操作过程中被其他事务修改的可能性很大,因此在操作开始时就主动加锁,确保数据的一致性和完整性.

优点:

防范未然:通过在操作开始时加锁,悲观锁可以有效避免数据冲突,就像悲观的人在遇到问题之前就做好了充分的准备,确保了数据的一致性和完整性. 适用场景广泛:悲观锁适用于冲突发生的概率较高的场景,就像悲观的人在面对复杂多变的情况时能够更好地应对,确保系统的稳定运行.

缺点:

限制并发性能:由于在操作过程中需要加锁,多个事务不能同时进行,就像悲观的人在团队中可能会因为过度担忧而影响团队的效率,降低了系统的并发性能.

总的来说,乐观锁和悲观锁各有优缺点,乐观锁适用于读多写少、数据冲突概率低的场景,而悲观锁适用于写多读少、数据冲突概率高的场景。