分布式锁原理与实战一:分布式锁简介

news2024/11/26 0:52:02

JVM的线程安全问题

        在单体的应用开发场景中,在多线程的环境下,涉及并发同步的时候,为了保证一个代码块在同一时间 只能由一个线程访问,我们一般可以使用 synchronized 语法和  ReetrantLock  去保证,这实际上是本地锁的方式。
        也就是说,在同一个 JVM  内部,大家往往采用  synchronized  或者  Lock  的方式来解决多线程间的安全问 题。但在分布式集群工作的开发场景中,在 JVM  之间,那么就需要一种更加高级的锁机制,来处理种跨 JVM 进程之间的线程安全问题。
解决方案是:使用分布式锁
        总之,对于分布式场景,我们可以使用分布式锁,它是控制分布式系统之间互斥访问共享资源 的一种方式。
        比如说在一个分布式系统中,多台机器上部署了多个服务,当客户端一个用户发起一个数据插入请求时,如果没有分布式锁机制保证,那么那多台机器上的多个服务可能进行并发插入操作,导致数据重复插入,对于某些不允许有多余数据的业务来说,这就会造成问题。而分布式锁机制就是为了解决类似这类问题,保证多个服务之间互斥的访问共享资源,如果一个服务抢占了分布式锁,其他服务没获取到锁,就不进行后续操作。
        大致意思如下图所示(不一定准确):

 何为分布式锁?

何为分布式锁?

  • 当在分布式模型下,数据只有一份(或有限制),此时需要利用锁的技术控制某一时刻修改数据的进程数。
  • 用一个状态值表示锁,对锁的占用和释放通过状态值来标识。

分布式锁的条件:

  • 互斥性。在任意时刻,只有一个客户端能持有锁。
  • 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。
  • 具有容错性。只要大部分的 Redis 节点正常运行,客户端就可以加锁和解锁。
  • 解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。

分布式锁的实现:

        分布式锁的实现由很多种,文件锁、数据库、redis 等等,比较多;分布式锁常见的多种实现方式:
  • 数据库悲观锁、
  • 数据库乐观锁;
  • 基于Redis的分布式锁;
  • 基于ZooKeeper的分布式锁。
        在实践中,还是redis 做分布式锁性能会高一些。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/621673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

指针--间接寻址运算符

通常,只要指明要访问的变量的内存地址,即可直接访问变量所在的存储单元中的内容。在前面都是直接通过变量名来访问变量的内容。直接按变量名或者变量的地址存取变量的内容的访问方式, 称为 直接寻址(Direct Addressing&#xff09…

STM32读取BH1750光照强度数据打印到串口

【1】BH1750是什么? BH1750是一种数字式环境光强度传感器(Digital Light Sensor),也称为其他名称,例如GY-302传感器、BH1750FVI传感器等。它的工作原理是通过收集光线照射到传感器上的量来测量环境亮度。 使用I2C&am…

操作系统 第三章 3.2 错题整理

页面引用串长度是什么意思 合法位存在位 不存在即发生故障 区分好页表项和逻辑地址 是不同的 逻辑地址48bit 偏移量12bit 页号36bit 页表项8B 4KB/8B2^9 一个页面能存放2^9个页表项 页号9bit,36/94 虚拟存储器包括内存和磁盘对换区,工作集要频繁用到&…

深度学习:使用UNet做图像语义分割,训练自己制作的数据集,详细教程

语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支。与分类任务不同,语义分割需要判断图像每个像素点的类别,进行精确分割。语义分割目前在自动驾驶、自动抠图、医疗影像等领域有着比较广泛的应用。我总结了使用UNet网络做图像语义分割的…

我们不一样-康耐视visionpro和apple vision pro

​ 机器视觉Halcon-不同颜色快速识别 康耐视Visionpro是美国cognex visionpro。 康耐视 VisionPro 是领先的计算机式视觉软件。它主要用于设置和部署视觉应用 - 无论是使用相机还是图像采集卡。借助 VisionPro,用户可执行各种功能,包括几何对象定位和检测、识别、测量和对准…

【Web服务应用】LVS负载均衡集群

LVS负载均衡集群 一、企业级集群含义1.1集群的含义1.2LVS一些专业术语 二、企业集群分类2.1负载均衡集群2.2高可用集群2.3高性能运算集群(High Performance Computer Cluster) 三、负载均衡的架构3.1负载均衡的结构 四、负载均很集群的工作模式4.1NAT模式…

JDBC连接数据库步骤(入门到进阶全)

目录 一、JDBC是什么? 二,JDBC的本质是什么? 为什么要用面向接口编程? 三、JDBC实现原理 四、使用idea开发JDBC代码配置驱动 ​编辑 五、JDBC编程六步概述 六、JDBC编程实现 1.插入实现 2.删除与更新实现 3 .类加载的方式注…

Jetson AGX Orin安装Anaconda、Cuda、Cudnn、Pytorch、Tensorrt最全教程

文章目录 一:Anaconda安装二:Cuda、Cudnn安装三:Pytorch安装四:Tensorrt安装 一:Anaconda安装 Jetson系列边缘开发板,其架构都是arm64,而不是传统PC的amd64,深度学习的环境配置方法…

chatgpt赋能python:Python对接技术在SEO中的应用

Python对接技术在SEO中的应用 Python作为一种高性能的编程语言,被广泛应用于各种领域,其中也包括了搜索引擎优化(SEO)领域。Python对接技术,也称为API对接技术,是指通过调用API接口来获取数据、信息或实现…

AI数字人打造之sadtalker让照片开口说话

1 sadtalker介绍 西安交通大学也开源了人工智能SadTalker模型,通过从音频中学习生成3D运动系数,使用全新的3D面部渲染器来生成头部运动,可以实现图片音频就能生成高质量的视频。 论文地址:Learning Realistic 3D Motion Coefficie…

chatgpt赋能python:Python屏蔽语句的重要性

Python屏蔽语句的重要性 Python是一种高级程序设计语言,被认为是开发Web应用程序、数据科学和人工智能的最佳语言之一。在编写Python程序时,每个人都会遇到需要屏蔽语句的情况。在本文中,我们将详细介绍Python屏蔽语句的重要性和用法。 什么…

chatgpt赋能python:Python建模仿真:优秀的工具与技巧

Python建模仿真:优秀的工具与技巧 在现代科技时代,建模仿真是许多不同行业的核心部分,帮助工程师和科学家研究解决许多问题。Python作为一种简单易学且强大的语言,已经被广泛应用于建模仿真领域。 Python的优点 Python在建模仿…

用Python进行数学建模(一)

一、导入数据 1.直接赋值 2.读取 Excel 文件 3.代码示例 import pandas as pd# 读取数据文件 def readDataFile(readPath): # readPath: 数据文件的地址和文件名try:if (readPath[-4:] ".csv"):dfFile pd.read_csv(readPath, header0, sep",") # 间隔…

chatgpt赋能python:Python嵌入C:一个高效的编程技巧

Python嵌入C:一个高效的编程技巧 作为一名有10年Python编程经验的工程师,我发现在某些情况下,Python嵌入C是一种高效的编程技巧。这种技巧可以使您利用Python的简洁性和高级功能,同时仍然保持程序的执行速度。在本文中&#xff0…

chatgpt赋能python:Python对接硬件:从入门到精通

Python对接硬件:从入门到精通 Python是一门极为强大的编程语言,它不只是用来进行数据分析和Web开发的,也可以用来对接各种硬件设备。这是因为Python具有简单易学,语法简洁,库众多的优点。 什么是Python对接硬件 Pyt…

通过AI工具(ChatGPT接口)生成一字未改的论文,查重率4.2%,可以直接当作论文使用

论文题目:基于AIOT技术的能源控制器的设计以及应用 查重结果:4.2% AI工具国内体验,关注:码视野,回复关键字:1002 一、引言 随着全球经济的快速发展和人口的增长,对能源的需求日益增加。然而&…

nodejs环境变量配置问题记录

问题一:Error: EPERM: operation not permitted, open ‘D:\Program Files\nodejs\node_cache\_cacache\tmp\bccd20 这个问题主要是没有权限导致的。 问题二:使用node命令提示 ‘node‘ 不是内部或外部命令,也不是可运行的程序 这个错误是环…

chatgpt赋能python:Python如何将文件另存为:让您的文件管理更便捷

Python如何将文件另存为:让您的文件管理更便捷 随着数字化时代的来临,文件管理已经成为我们日常工作不可缺少的一部分。当涉及到大量的文件管理时,手动操作可能会浪费大量的时间和精力。 在这种情况下,自动化的解决方案将会是很有…

【玩转Linux操作】用户管理(命令讲解配上样例解释)

🎊专栏【玩转Linux操作】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题🥰 文章目录 🍔添加用户⭐命令🎈useradd 用户名 ⭐演示…

【日志解析】【启发式】Drain:一种用于日志解析的深度解析树

Drain:An Online Log Parsing Approach with Fixed Depth Tree 文章目录 Drain:An Online Log Parsing Approach with Fixed Depth Tree1 论文出处2 背景2.1 背景介绍2.2 针对问题2.3 创新点 3 主要设计思路3.1 Drain整体结构3.2 具体步骤 4 实验设计5 个…