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

    前言

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

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

    正文

    悲观锁:

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

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

    乐观锁:

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

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

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    学了axure的感受
    axure的功能
    PS的应用
    day15-1 模块
    day14-2 模块详解
    day14-1 模块定义,导入
    day13-1 Json & pickle 数据序列化
    day12-3 内置方法
    day12-2 内置方法
    day12-1 迭代器和生成器
  • 原文地址:https://www.cnblogs.com/aoximin/p/13570629.html
Copyright © 2011-2022 走看看