悲观锁:就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁。这样别人想拿这个数据就会 block 直到它拿到锁。传统的关系型数据库就用到了很多这种机制,比如行锁,写锁等,都是在操作之前上锁。

乐观锁:就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。适用于多读,比如 .两种锁各有优缺点,不能认为一种比一种好。

对于锁来说,它是互斥的排它的,意思就是只要我获得了锁,没人再能获得,而对于 来说,它允许多个线程同时进入临界区,可认为它是一个共享锁,但是共享的额度是有限的,额度用完了,其他没有拿到额度的线程还是要阻塞在临界区外,当额度为 1时,相当于 lock。

悲观锁大多数情况下,依靠数据库的锁机制。乐观锁大多基于数据版本,记录机制实现。数据版本。为数据增加一个版本标识,比如增加一个 字段。读数据时,将版本号一块儿读出,之后更新时,版本号加 1,将提交数据的版本号与数据库表对应记录的当前版本号进行对比。若提交的大于数据库里面的,则可以更新,否则认为是过期数据。将乐观锁策略在存储过程中实现,对外只开放基于此存储过程的数据更新途径,而不是将数据表直接对外公开。

解决超卖的方法 1)乐观锁 2)队列,建立一条先进先出的队列,每个请求加入到队列中,然后异步获取队列数据进行处理,把多线程变为单线程,处理完一个就从队列中移出一个,因为高并发,可能一下将内存撑爆,然后系统又陷入异常状态。或者设计一个极大的队列,但是系统处理速度和涌入速度根本没办法比,平均响应时间小。

乐观锁和悲欢锁的区别_乐观锁_乐观锁的业务场景及实现方式

———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666

声明:1、本内容转载于网络,版权归原作者所有!2、本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。3、本内容若侵犯到你的版权利益,请联系我们,会尽快给予删除处理!