乐观锁与悲观锁简述

    在工作中碰到了高并发的场景,数据量很大,后台是供应链系统,对应的表是库存记录表,每一次仓库或者门店单据状态的变化都会产生大量的数据,并且可能有多个端对同一单据进行操作的情况,故在数据库访问层使用了锁配置。

    这里主要讲用到的关系型数据库层面的锁机制,将对两种所分别介绍:

    乐观锁,就是字面的意思,态度很乐观,觉得不会发生同一条数据多人访问或修改的情况,但是在访问的时候会先获取最新的数据,使用版本号等机制去实现。相较于悲观锁来说,乐观锁安全性并没有做到绝对,但相对的可以提高效率。乐观锁的实现方法为例如存储的是当前的总数,那就可以再update的set中写为totalCount=totalCount+#totalCount#,而不是在后台计算完把数据拿回来直接用。当然也可以通过版本号条件来实现。

   悲观锁,对系统持悲观态度,认为肯定会发生并发时间,自己访问数据的时候别人肯定也会修改,所以会在操作之前对表进行锁定,直到操作完成。一般使用的是行锁、表锁等,如果同时锁定多条数据,需要同时锁定复数条,否则多线程的情况下会造成死锁。悲观锁的实现方式为update之前的select后添加for update就可以。

    数据库层面的锁好处在于即使多系统使用同一个库,也能利用数据库的排他性保证数据的安全。

 

作者 : emsui

出处:https://my.oschina.net/wyd524/blog/1841884

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

    

转载于:https://my.oschina.net/wyd524/blog/1841884

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值