乐观锁与悲观锁

  • 悲观锁
    • 什么是悲观锁
      • 所谓悲观锁,顾名思义就是以悲观的姿态来防止一切数据冲突。当修改数据的时候,先把数据锁住,在其释放这个锁前拒绝其他任何对此数据的操作
    • 特点
      • 保证数据的独占性和正确性
      • 由于每次的请求都会先对数据进行加锁,然后再进行数据操作,最后再解锁。这个过程造成了很多的小号,所以效率不高
    • 手动加悲观锁
      • 读锁与释放锁
        • 读锁:LOCK TABLES TEST_DB READ
        • 释放锁:UNLOCK TABLES
      • 写锁和释放锁
        • 写锁:LOCK TABLES TEST_DB WRITE
        • 释放锁:UNLOCK TABLES
  • 乐观锁
    • 什么是乐观锁
      • 乐观锁是对于数据冲突保存着一种乐观的态度,操作数据的时候不会对其进行加锁,到了提交数据的时候会通过一种机制来验证数据是否存在冲突
    • 特点
      • 乐观锁是一种并发类型的锁,其本身是不对数据加锁的。于是就大大的提高了数据操作的性能,允许多个任务可以并行的对数据进行操作
      • 一般实现验证机制使用的是加版本号的对比方式
    • 举例:
      • 假若现在存在以下数据:
      • https://img.mubu.com/document_image/98555c4c-4dc6-4533-958a-bbc884d52e40-919844.jpg
        • 这个时候来了操作2,它在操作1还没有提交的时候拿出来本条数据,然后修改了姓名为zhaoliu,然后在操作1操作提交之后再想去提交的时候,由于SQL语句为:update A set Name=zhaoliu,version=version+1 where ID=#{id} and version=#{version}
        • 这个version已经被更新了,无法进行此操作,所以产生冲突,提交失败
        • 图示:
      • 操作1已经将姓名改为了wangwu,并且修改了版本号为2
      • https://img.mubu.com/document_image/45019272-354d-484a-aba1-87129c759335-919844.jpg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值