悲观锁和乐观锁的区别
悲观锁
悲观锁认为数据在处理过程中的任何时候都有可能出现冲突,因此在数据读取时就对其进行锁定,防止其他事务进行修改,直到完成读取或修改后才释放锁。
在关系型数据库中,通常通过使用数据库的事务和锁的机制实现悲观并发控制,例如使用SELECT FOR UPDATE语句在读取记录时加上锁,这样其他事务就不能修改这些数据。这种方式简单直接,容易理解和实现,但在高并发环境下会产生大量的锁争用,影响性能。
乐观锁
乐观锁则认为数据在大部分情况下不会发生冲突,因此先进行操作,但在更新的时候检查数据是否发生了变化。如果数据没有变化,则操作成功;如果数据已经变化,则根据预定的策略处理冲突。
通常通过使用数据版本号或时间戳来实现乐观并发控制。例如,可以在记录中加入一个版本号字段,每次更新时都将版本号加一,当读取记录时会记录下版本号,在更新时检查版本号是否发生变化,如果没有变化则进行更新,否则认为发生了冲突。
乐观锁适合于冲突较少的场景,可以减少锁的使用,提高并发性能。
总的来说,悲观锁适用于冲突较多,且需要精确控制事务的场景,而乐观锁适用于冲突较少,且对性能要求较高的场景。
标签:读取,区别,版本号,乐观,并发,冲突,悲观 From: https://www.cnblogs.com/kuin/p/18256368