1、锁的出现,是因为并发读写同一个数据的时候,需要进行数据完备性的保护,避免脏读、脏写等。
2、乐观锁,需要在事务中加锁,在读取数据的时候,不必在意数据是否已经被修改了(即允许脏读);但是在写入数据的时候,要检查数据是否已经被修改了(可以通过版本号等机制控制),如果被修改那么就通知事务调用者,事务失败了。
3、悲观锁,需要在事务中加锁,在读取、写入数据的时候,都需要考虑数据是否已经被修改,如果被修改了,那么就通知事务调用者,事务被阻塞了,进入等待状态。
4、从性能上看,乐观锁性能会高一些,因为悲观锁要检查更多的数据变动情况,而且还会存在阻塞。
5、从使用场景上看,悲观锁一般用于要求很强的数据一致性的系统,读写都不允许“脏”,乐观锁一般用于一致性稍弱的系统,不允许脏写,但是允许脏读。
概念引申:数据库的各种锁,分布式系统的CAP原则。
时间: 2024-11-03 01:16:56