乐观锁和悲观锁

悲观锁:不相信其他人不会修改,传统的关系型数据库里边就用到了很多这种锁机制,如mysql, 每次查询、修改数据操作之前就会上锁,整个数据处理过程中,将数据处于锁定状态,自己更新数据后再释放锁,可以有效防止库存冲突问题

乐观锁:相信其他人不会修改,所以查询、修改数据库时不会上锁,所以再数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则返回错误的信息,让用户决定如何 去做

乐观锁作用举例:

  1. 电商网站库存,当多用户并发修改同一条记录时,可定是后提交的用户将覆盖前者提交的结果,这个时候,可以使用加乐观锁的机制去解决高并发的问题

  2. Reids 的并发竞争问题解决方案,使用乐观锁方式进行解决,成本低,非阻塞,性能较高、

乐观锁的业务流程

  • 事务开始

    1. 查询、修改数据表

    2. 对数据库 操作

  • 事务提交 释放锁

  • 优点与不足

    1. 在数据提交的时候才去锁定,所以不会产生任何的锁和死锁,

    2. 读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。

    3. 当两个不同的事务同时读取到一条数据并进行修改时,就会报错,解决方案,尽量从业务方面减小事务块,事务块越大,由乐观锁引起的问题的概率就越大

悲观锁的业务流程

  • 事务开始

    1. 查询、修改数据表之前 加锁

    2. 对数据库 操作

  • 事务提交(检测、返回冲突)

  • 优点与不足

    1. 先取锁再访问 为数据处理的安全性提供了保证

    2. 效率方面,让数据库产生了额外的开销 ,增加了死锁的机会

    3. 对于只读事务处理,不会产生并发冲突,加悲观锁,指挥增加系统的负载,降低了并行性

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值