乐观锁和悲观锁

    如对你有帮助,请我喝杯咖啡吧! 打赏

乐观锁和悲观锁都是为了实现数据的一致性
乐观锁扛并发能力强,用的比较多一点

乐观锁
总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制或CAS算法实现
版本号实现方式:
表中增加一个version字段,每次读的时候读出version字段,修改的时候把字段值加1,
此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据

悲观锁
总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁
优点:实现简单,数据一致性强
缺点:每次查询都会行锁,扛并发能力弱
实现: select .. for update(只能在事物中使用)
注意:where条件中字段要加索引,不然非索引字段的查询容易导致表锁