乐观锁version的使用

本文介绍了悲观锁与乐观锁的概念,强调了两者在并发控制中的适用场景。悲观锁适用于写操作频繁,而乐观锁适用于读操作多的场景。详细讲述了乐观锁的版本号机制,并提供了在SpringBoot中实现乐观锁的配置和注解使用方法。

先来介绍一下悲观锁与乐观锁的概念。

1.悲观锁

       指的是在操作数据的时候比较悲观,悲观地认为别人一定会同时修改数据,因此悲观锁在操作数据时是直接把数据上锁,直到操作完成之后才会释放锁,在上锁期间其他人不能操作数据。

        冲突比较多的时候, 使用悲观锁(没有乐观锁那么多次的尝试)对于每一次数据修改都要上锁,如果在DB读取需要比较大的情况下有线程在执行数据修改操作会导致读操作全部被挂载起来,等修改线程释放了锁才能读到数据,体验极差。所以比较适合用在DB写大于读的情况。

2.乐观锁

        指的是在操作数据的时候非常乐观,乐观地认为别人不会同时修改数据,因此乐观锁默认是不会上锁的,只有在执行更新的时候才会去判断在此期间别人是否修改了数据,如果别人修改了数据则放弃操作,否则执行操作。

        冲突比较少的时候, 使用乐观锁(没有悲观锁那样耗时的开销) 由于乐观锁的不上锁特性,所以在性能方面要比悲观锁好,比较适合用在DB的读大于写的业务场景。

        乐观锁是为了解决线程冲突情况下脏读,幻读等现象。

        也就是说 读取频繁使用乐观锁,写入频繁使用悲观锁。

3.乐观锁的版本号机制实现方式

        (1)配置乐观锁插件代码,以下是springboot的写法,写在配置类里面。

/**
 * 乐观锁插件
 */
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
    return interceptor;
}

        (2)在version属性上面加入@Version注解 ,这个注解必须要有。

@ApiModelProperty(value = "乐观锁字段")
@Version
private Integer version;

        (3)在业务代码中遵循 先查 后改 的操作,这样乐观锁version版本才会 version+1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值