美文网首页PHP经验分享
乐观锁和悲观锁

乐观锁和悲观锁

作者: 云边一片海 | 来源:发表于2020-05-29 08:54 被阅读0次

数据库管理系统中的并发控制的任务是确保在多个事务同事存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。

乐观锁(Optimistic Locking)

  • 顾名思义,乐观锁表示看待事物比较乐观,默认当A修改某条数据的时候,不会有B来修改这条数据,常表现在提交修改的时候进行锁数据,修改完后解除锁。
    通常情况下配合版本号version进行使用
    例如更新库存操作,从10更新到9:
update sku set qty=9,version=2 where id = 1 and version=1
更新成功则成功,否则抛出错误异常

悲观锁(Pessimistic Lock)

  • 顾名思义,悲观锁表示一个人看待事物比较悲观,默认当A来修改某条数据的时候,会有其他的人来修改,因此常表现在查询的时候就把数据锁定,修改完后解除锁。
    思路:
    1.查询时候加锁----对记录修改之前
    2.加锁失败,抛出错误
    3.加锁成功,修改数据
    4.成功,解锁;失败,抛异常,解锁
$db->autocommit(false); // 开始事务
select * from 表明 where 查询条件 for  update; // 修改前的查询锁表
update ..........;// 修改
if(修改成功的判断) { 
    $db->commit();
} else {
    $db->rollback();
}

选择性使用

1.乐观锁并没有真正的加锁,因此效率高一些,但更新失败的几率也会大,并发量高的时候业务失败的几率会大很多。
2.悲观锁是对数据库上锁,高并发会导致数据库卡顿,进而导致服务器卡顿,更新的效率比较低,但业务失败率略低。

相关文章

  • 看完你就知道的乐观锁和悲观锁

    看完你就知道的乐观锁和悲观锁 Java 锁之乐观锁和悲观锁 [TOC] Java 按照锁的实现分为乐观锁和悲观锁,...

  • 乐观锁和悲观锁

    参考来源 深入理解乐观锁与悲观锁 乐观锁的一种实现方式——CAS mysql乐观锁总结和实践 乐观锁和悲观锁 悲观...

  • 锁的概述

    乐观锁与悲观锁 悲观锁 乐观锁和悲观锁的概念出自数据库,但在java并发包中也引入和类似的概念(乐观锁/悲观锁是一...

  • 并发参数

    悲观锁与乐观锁 悲观锁 synchronized和ReentrantLock等独占锁就是悲观锁思想的实现乐观锁一般...

  • CAS 与原子操作

    乐观锁与悲观锁 锁可以从不同的角度分类。其中,乐观锁和悲观锁是一种分类方式。 乐观锁:乐观锁又称为“无锁”。乐观锁...

  • 04 番外(待补充AQS相关原理) Java多线程中的各种锁

    1 乐观锁 悲观锁 1.1 乐观锁 乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设...

  • Mysql锁

    按照使用方式,锁分为: 悲观锁 乐观锁 乐观锁 概念就不细讲了,乐观锁和悲观锁的区别是乐观锁是假设在修改数据之前,...

  • MySQL之乐观锁·MVCC

    一、 乐观锁 和 悲观锁 乐观锁 和 悲观锁 是实现并发操作的两种不同的 加锁思想,其中: 乐观锁 假设:操作能成...

  • 蚂蚁面试

    1、mysql乐观锁和悲观锁的区别? 乐观锁通过MVCC,版本实现,悲观锁select... for update...

  • 一文简介乐观锁和悲观锁

    悲观锁和乐观锁的概念 乐观锁和悲观锁在面试过程中是经常遇到的,那么什么是乐观锁什么是悲观锁呢?首先需要明确的是乐观...

网友评论

    本文标题:乐观锁和悲观锁

    本文链接:https://www.haomeiwen.com/subject/wugtzhtx.html