2022-06-15 04:22:26
悲观锁和乐观锁的定义如下:
悲观锁
具有强烈的独占和排他特性,是一种对数据被外界修改持保守态度的并发控制机制。其核心逻辑是:在修改数据前,先通过数据库锁机制锁定数据,防止其他事务同时修改。这种策略假设数据被并发修改的概率较高,因此采用“先加锁再处理”的保守方式。
悲观锁的实现依赖数据库提供的锁机制(如共享锁、排他锁),通过锁定数据确保操作的原子性和隔离性。例如,排他锁(X锁)会阻止其他事务读取或修改已锁定的数据,直到当前事务完成。
特点:
乐观锁
一种基于宽松加锁策略的并发控制机制,假设数据一般情况下不会发生冲突,因此在数据提交更新时才检测冲突。若发现冲突,则返回错误信息,由用户或系统决定后续处理。
乐观锁不依赖数据库本身的锁机制,而是通过数据版本(如版本号、时间戳)或校验机制(如CAS)保证数据正确性。例如,更新时检查数据版本是否与读取时一致,若不一致则说明数据已被其他事务修改。
特点:
核心区别:
悲观锁通过“先加锁再处理”确保安全,但牺牲了效率;乐观锁通过“先处理后检测”提升效率,但需处理冲突。两者分别适用于高冲突和低冲突场景,实际开发中需根据业务需求权衡选择。