什么是乐观锁?SpringBoot项目中如何使用Mybatis-plus实现乐观锁
1、乐观锁
主要用来解决丢失更新问题
2、什么是丢失更新
丢失更新:当两个用户,用户A和用户B对同一数据C的年龄(10)进行修改时,因为即使在高并发的时候,提交也会有先后顺序,A将C的年龄10修改为20之后,B将C的年龄10修改为30,最后查询数据时,查询的是B修改后的数据,这就是丢失更新正确的情况应该是,A先将年龄修改为20,B修改20为30,而不是两个用户同时修改10
3、怎么解决丢失更新问题
针对丢失更新问题,一般有两种解决方案:悲观锁、乐观锁。悲观锁: 当A用户进行修改时,其他用户等待,不能对数据进行操作,等待A操作完成,效率低乐观锁:在数据中添加一个字段,版本version,当查询数据时获取当前版本号,更新时带着版本号执行更新后版本号+1,如果版本号不对,则更新失败。
4、什么时候使用乐观锁
提到乐观锁就要简单回顾一下事务,事务有四大特性:原子性 一致性 隔离性 持久性当我们单个用户操作的时候,则不需要考虑事务的隔离性,当产生高并发时,多个用户同时对数据库进行操作,如果不考虑事务隔离性,在用户进行查询操作时,会产生脏读、幻读、不可重复读等问题.在用户进行修改操作时,会产生丢失更新问题.此时用到乐观锁
具体解释
起初C数据的版本号为1,A和B同时查询到年龄数据,此时获得相同的版本号1,A修改时版本号与起初版本号一致,则可以修改数据,当A修改了年龄之后,提交修改,此时C数据的版本号+1变为2,当B再进行修改时,B所获得的版本号1与A修改后的版本号2不一致,则修改失败。
5、乐观锁应用场景
12306抢票,很多人在抢同一张票,当第一个人支付成功之后,其他人则不能支付。
<