分布式锁的使用场景是什么?有哪些实现方法?

在单体架构中,多个线程都是属于同一个进程的,所以在线程并发执行遇到资源竞争时,可以利用ReentrantLock、synchronized等技术来作为锁,来控制共享资源的使用。

而在分布式架构中,多个线程是可能处于不同进程中的,而这些线程并发执行遇到资源竞争时,利用ReentrantLock、synchronized等技术是没办法来控制多个进程中的线程的,所以需要分布式锁,意思就是,需要一个分布式锁生成器,分布式系统中的应用程序都可以来使用这个生成器所提供的锁,从而达到多个进程中的线程使用同一把锁。
目前主流的分布式锁的实现方案有两种:

1.zookeeper: 利用的是zookeeper的临时节点、顺序节点、watch机制来实现的,zookeeper分布式锁的特点是高一致性,因为zookeeper保证的是CP,所以由它实现的分布式锁更可靠,不会出现混乱

2.redis: 利用redis的setnx、lua脚本、消费订阅等机制来实现的,recs分布式锁的特点是高可用,因为redis保证的是AP,所以由它实现的分布式锁可能不可靠,不稳定(一旦redis中的数据出现了不一致),可能会出现多个客户端同时加到锁的情况
 

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

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

相关文章

5.串口通信

串口的介绍 UART(通用异步收发器)是一种双向、串行、异步的通信总线,仅用一根数据接收线(RX)和一根数据发送线(TX)就能实现全双工通信 R:Receiver(接收),T:T…

mac os 去除压缩包下的__MACOSX

mac os 去除压缩包下的__MACOSX 步骤 步骤 在mac上压缩文件后执行 zip -d xxx.zip "__MACOSX*"

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 中文分词模拟器(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

Vue的动态和异步组件:提升应用性能的利器

引言 在现代前端应用开发中,组件化是构建用户界面的主流方式。Vue.js 作为一个流行的前端框架,提供了强大的组件系统。Vue 不仅支持静态组件的使用,还支持动态组件和异步组件。动态组件允许我们在运行时动态地切换不同的组件,而异步组件则允许我们在需要时才加载组件。这两…

浅谈Canal原理

canal [kə’nl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据 订阅 和 消费。应该是阿里云DTS(Data Transfer Service)的开源版本。 Canal与DTS提供的功能基本相似: 基于…

vue2学习笔记9 - 通过观察vue实例中的data,理解Vue中的数据代理

接着上一节,学一学vue中的数据代理。学vue这几天,最大的感受就是,名词众多,听得发懵。。不过,深入理解之后,其实说得都是一回事。 在Vue中,数据代理是指在实例化Vue对象时,将data对…

神经网络模型实现(训练、测试)

目录 一、神经网络骨架:二、卷积操作:三、卷积层:四、池化层:五、激活函数(以ReLU为例):六、模型搭建:七、损失函数、梯度下降:八、模型保存与加载:九、模型训…

Oracle select for update 用法

SELECT FOR UPDATE 用法 1、SELECT…FOR UPDATE 语法 SELECT … FOR UPDATE [OF column_list][WAIT n|NOWAIT][SKIP LOCKED]; 其中:   OF 子句用于指定即将更新的列,即锁定行上的特定列。   WAIT 子句指定等待其他用户释放锁的秒数,防止…

基于RFID的课堂签到系统设计

1.简介 基于RFID的课堂签到系统设计是一种利用无线射频识别(RFID)技术实现课堂自动签到的系统。这种系统通过RFID标签(通常是学生携带的卡片或手环等)与安装在教室内的RFID读写器之间的无线电信号进行数据交换,从而实现…

移动设备安全革命:应对威胁与解决方案

移动设备已成为我们日常工作和家庭生活中不可或缺的工具,然而,对于它们安全性的关注和投资仍然远远不够。本文深入分析了移动设备安全的发展轨迹、目前面临的威胁态势,以及业界对于这些安全漏洞响应迟缓的深层原因。文中还探讨了人们在心理层…

Java跨平台的原理是什么?JDK,JRE,JVM三者的作用和区别?xxx.java和xxx.class有什么区别?看这一篇就够了

目录 1. Java跨平台相关问题 1.1 什么是跨平台(平台无关性)? 1.2 跨平台(平台无关性)的好处? 1.3 编译原理基础(Java程序编译过程) 1.4Java跨平台的是实现原理? 1.4.1 JVM(Java虚拟机) 1.4.2 Class文件 1.4.3 …

485开关量采集模块16路I/O输入输出ModbusRTU协议—DAM-3950A

品牌:阿尔泰科技 型号:DAM-3950A 概述: DAM-3950A为16路隔离数字量输入,6路C型10路A型信号继电器输出模块,RS485通讯接口,带有标准ModbusRTU协议。配备良好的人机交互界面,使用方便&#xff…

Linux 文件安装的mysql 启动

1、找到my.cnf 2、确定文件类容: 并确保这些重要的配置:basedir 、datadir、socket 文件或目录都存在 3、找到mysqld 位置 4、启动mysqld mysqld --defaults-file/etc/my.cnf --usermysql

使用Spring的 Environment 和 ConfigurableEnvironment 来在springboot应用启动过程中对属性进行修改。

1.修改yml文件的问题 我在上一篇文章中介绍了使用《java启动springboot项目前根据环境变量动态改编yaml文件的变量值》但是在FC启动后发现存在问题 springboot初始化时需要初始化数据库,这时就会存在数据库连接在yml文件修改之前,这就会导致链接数据库…

feign 报错 Connection reset executing POST

feign 连接异常: feign.RetryableException: Connection reset executing POST替换 feign的 client : Feign在默认情况下使用的是JDK原生的 URLConnection 发送HTTP请求,没有连接池。 可以尝试替换成 httpclient 或者 okhttp。调整最大连接…

c++基础(类和对象中)(类的默认成员函数)

目录 一.构造函数(类似初始化) 1.概念 2.构造函数的特点 二.析构函数(类似 销毁对象/空间) 三.拷贝构造函数(类似复制粘贴的一种 初始化 ) 1.概念: 2.拷贝构造的特点: 四.赋值运算符重载&#xff08…

level 6 day2-3 网络基础2---TCP编程

1.socket(三种套接字:认真看) 套接字就是在这个应用空间和内核空间的一个接口,如下图 原始套接字可以从应用层直接访问到网络层,跳过了传输层,比如在ubtan里面直接ping 一个ip地址,他没有经过TCP或者UDP的数…

Android 11 使用HAL层的ffmpeg库(1)

1.frameworks/av/media目录下面的修改 From edd6f1374c1f15783d9920ebda22ea915e503775 Mon Sep 17 00:00:00 2001 From: GW00219471 <zhumingxingnoboauto.com> Date: Wed, 17 Jan 2024 15:16:10 0800 Subject: [PATCH] ?UTF-8?q?[V35CUX-4542]:E7A7BBE6A48Dcux20E8…

华为OD机试(C卷,200分)- 二叉树计算

题目描述 给出一个二叉树如下图所示&#xff1a; 请由该二叉树生成一个新的二叉树&#xff0c;它满足其树中的每个节点将包含原始树中的左子树和右子树的和。 左子树表示该节点左侧叶子节点为根节点的一颗新树&#xff1b;右子树表示该节点右侧叶子节点为根节点的一颗新树。…

VS+QT 打包可执行文件.exe

切换成release版本&#xff0c;同时更改项目属性中release配置下的各个属性&#xff0c;确保匹配 重新生成解决方案&#xff0c;将生成的.exe复制到一个空白文件夹中 执行&#xff1a; cd D:\QT\5.12.10\msvc2015_64\binwindeployqt C:\Users\DELL\Desktop\serials\MainWind…