首页 > 数据库 >MySQL——分布式锁

MySQL——分布式锁

时间:2023-09-17 23:36:23浏览次数:57  
标签:同步 悲观 CAS 线程 状态值 MySQL 分布式

锁是一种抽象概念,是一种思想。并发环境下,多个线程会对同一资源争抢,可能导致数据不一致的问题。因此,很多编程语言都引入了锁。

Java中的锁

互斥锁(悲观锁(有锁同步))

操作系统悲观地认为如果不严格同步线程调用,那么一定会产生异常,互斥锁将会将资源锁定,只供一个线程调用,阻塞其他线程(独占资源),该同步机制也称为悲观锁。

如synchronized代码块就是互斥锁的一种实现。

有些时候,同步代码快执行的耗时远远小于线程切换的耗时。所以在这种情况下,不想要让操作系统那么悲观,所以能不能不对共享资源进行锁定,也能对线程调用进行协调?

乐观锁(无锁同步)

上层的无锁线程同步依赖的是CPU底层的CAS操作。

CAS(compare and swap)算法:

当资源对象的状态值符合要求,多条线程中的每条线程各自产生两个值,old value(之前读到的资源对象状态值),new value(想要将资源对象的状态值更新后的值)。

前一线程抢占到资源后,后一线程进行自旋(不断重试CAS操作),同时配置自旋次数防止死循环。

前提:CS必须是原子性的(由CPU底层指令架构支持)。

因此产生了一系列通过CAS来实现同步的工具,这些工具不会锁定资源,而且线程需要修改共享资源时,会乐观地认为对象状态值没有被其他线程修改过,主动尝试去compare状态值,该同步机制称为乐观锁。

所以乐观锁更准确地应称为无锁同步

MySQL中的锁

数据库并发场景有三种:读-读、读-写、写-写。

数据库中的乐观锁更倾向叫乐观并发控制(OCC),悲观锁叫悲观并发控制(PCC)。

不要把乐观锁和悲观锁与数据库中的行锁,表锁,排他锁,共享锁混为一谈,他们并不是一个维度的东西;前者是一种思想,后者是具体实现。

MySQL中悲观锁的实现

  • 外界要访问某条数据,那它就要首先向数据库申请该数据的锁(某种锁)。
  • 如果获得成功,那它就可以操作该数据,在它操作期间,其他客户端就无法再操作该数据了。
  • 如果获得失败,则代表同一时间已有其他客户端获得了该锁,那就必须等待其他客户端释放锁。

数据库提供了非常多的锁,每种数据库提供的锁也不尽相同,所以具体情况就要看是什么锁了。MySQL中的行锁,表锁是悲观锁的具体实现之一。

优点

适合写多读少或读写都频繁的场景。

缺点

加锁增加系统开销,降低数据吞吐量。

MySQL中乐观锁的实现

假设认为在各类并发环境中,外界对数据的操作一般是不会造成冲突的,所以并不加锁,而是基于版本控制,采用类似Java中无锁同步所采用的CAS算法。

适合读多写少的场景。

标签:同步,悲观,CAS,线程,状态值,MySQL,分布式
From: https://www.cnblogs.com/fallorange/p/17710238.html

相关文章

  • MySQL数据库学习心得
    MySQL数据库是一个常用的关系型数据库管理系统,它由瑞典公司MySQLAB开发,后来被SunMicrosystems收购,最终被甲骨文公司(OracleCorporation)收购。MySQL数据库具有高效、稳定、可靠的特点,被广泛应用于Web开发、数据存储和管理等方面。一、安装和配置MySQL首先,您需要在您的计算机上安......
  • 9-MySQL数据库 数据的备份与恢复
    1.date文件的备份2.mysqldump备份说明:mysqldump是MySQL数据库中的一个实用程序,它主要用于转储(备份)数据库。mysqldump通过生成一个SQL脚本文件,包含从头开始重新创建数据库所必需的(如CREATETABLE和INSERT等),来实现数据库的备份和转储。这样,你可以在任何时候通过运行这个脚本文......
  • 分布式
    单机服务器常发生的问题在单机服务器中,常常会面临以下几个问题:服务器电脑宕机:这是最常见的问题之一,当服务器的硬件或者软件出现故障时,可能导致服务器无法正常运行。这种情况下,系统管理员需要及时排查故障原因,并修复问题,以保证服务器的稳定性和可用性。网络异常:网络连接是服......
  • mysql连接不上Job for mysqld.service failed because the control process exited wi
    问题:mysql服务器链接不上我们是自己买的服务器搭建的,查看mysql的服务器能不能连的上,看服务是否正常查看进程:top-c;查看磁盘:df-h;linux环境有很多大小,只需要看最大的一个存储就行了,发现可使用的没了,我这图片是清理过后的问题解决先要排查是哪些文件堆满了磁盘,极大的......
  • mysql存储与计算地理位置信息
    ●Geometry○Geometry是集合对象的基类,也就是说Point、lineString、polygon都是Geometry的子类●Point○点对象,有一个坐标值,没有长度、面积、边界。数据格式为:经度longitude在前,纬度latitude在后,用空格分割,例如:POINT(116.416352857884139.870942749660706)●LingString......
  • MySQL 索引、事务与存储引擎
     一、索引1.索引的概念●索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。●使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,......
  • 8-MySQL查询高级用法,数据表的关联关系
    1.分组groupby详情见,发布的第七篇博客文章,7-MySQL函数2.排序orderby说明:在MySQL中,ORDERBY是一种用于对查询结果进行排序的关键字。它可以根据一列或多列的值,以升序或降序的方式对查询结果进行排序,使得查询者可以更加方便地查看、分析和处理数据。使用ORDERBY时,需要指......
  • MySQL数据库管理
    1.MySQL数据库管理数据库-->数据表-->行(记录):用来描述一个对象的信息                   列(字段):用来描述对象的一个属性1.2常用的数据类型:int:整型  无符号[0,2^32-1],有符号[-2^31,2^31-1]float:单精度浮点   4字节32位double:双精度浮点......
  • MySQL笔记目录
    MySQL目录本视频学习自尚硅谷的MySQL教程,原地址在这笔记源自官方提供笔记,根据自己的理解重新排版修改、并增添了一些内容初级篇第一章MySQL概述第二章MySQL环境搭建(mysql环境安装、配置、卸载、登录)第三章SQL介绍DDL数据库和表的操作第四章MySQL数据类型......
  • 7-MySQL函数
    1.分组groupby在MySQL中,GROUPBY的意思是“分组查询”,它可以根据一个或多个字段对查询结果进行分组。GROUPBY的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。这可以理解为将数据按照某个字段或者多个字段进行分组。使用GROUPBY......