乐观锁
概念:乐观锁假定数据一般情况下不会发生并发冲突,是相对于悲观锁而言的。所以在数据进行提交更新时,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让用户返回错误信息,并让用户决定如何去做。
实现:在对数据库进行处理时,乐观锁并不会使用数据库提供的锁机制,而是基于数据版本(Version)记录机制来实现乐观锁。例:update table set columnA = 1,version=version+1 where id=#{id} and version = #{oldVersion}。在读取数据时将版本标识一起读出,数据每发生一次更新,版本值加1,。在提交更新时,比较读到的数据与提交时的数据是否一致,如果一致则予以更新,提交后修改版本标识,不一致时可以采取丢弃和再次尝试的策略。
优点:程序实现,乐观锁并未真正加锁,所以不会产生任何锁和死锁。更新数据的速度提高了。
缺点:当应用并发量高的时候,version值在频繁变化,则会导致大量请求失败,影响系统的可用性。
适用场景:乐观锁比较适合并发量不高ÿ