zoukankan      html  css  js  c++  java
  • mysql 悲观锁和乐观锁(二)

    前言

    简单介绍一下,在mysql 优化系列中会重新介绍,仅仅是留个印象。

    悲观锁和乐观锁其实都是概念性问题。

    正文

    悲观锁:

    悲观锁,正如其名,具有强烈的独占和排他特性。
    它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。
    悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。
    

    这个其实就是数据库帮助你加锁,认为每次获取数据都会被其他线程修改,每次来操作数据的时候都会加锁,这就可以就看上一章的读锁和写锁了。

    乐观锁:

    认为每次读取后,数据在一般不会发生冲突,在读取操作的时候不会去添加锁。

    首先是什么问题产生了这个悲观锁和乐观锁的问题呢?

    举个例子,这其实就是生活中一个很简单的例子。

    比如有一辆公共汽车,你上车后,然后你要下车,这时候如何保证这个位置没有其他人坐呢?

    最简单的方式就是放个书包,告诉我们这个位置有人了,相当于加锁。

    但是这样性能是下降的,因为你得放书包啊,到时候你还得拿走。

    那么这时候有人就认为这辆车没啥人,我就不去干书包这件事。

    那么问题就来了,当我上车的时候如何万一有人怎么办?

    这就是乐观锁得了方便,但是也是要解决的问题。

    回到数据库乐观锁问题上,乐观锁的一种解决方法就是加一个版本号。

    就是读取的时候,把版本号读取出来,修改的使用加上版本号作为条件。

    如果版本号没有修改,那么就修改,如果版本号修改了,那么就另外加入队列中或者立即重新执行。

  • 相关阅读:
    逻辑结算的结果是什么类型?比较运算的值是什么类型?
    算术运算有哪些?逻辑运算有哪些?比较运算有哪些?
    为什么要强制类型转换?什么情况下使用强制类型转换?说说强制类型转换的优点和缺点
    Java中如何强制类型转换
    基本数据类型和引用类型的区别
    Go switch语句
    Go 循环
    Go if_else语句
    Go 包
    Go 函数
  • 原文地址:https://www.cnblogs.com/aoximin/p/13570629.html
Copyright © 2011-2022 走看看