当前位置: 首页 > backend >正文

单锁与分布式锁

1.单锁:

单锁与分布式锁指的实质上是使用设备的数量。顾名思义,单锁只能对单个设备进行上锁,多个设备就会出现问题,也就是说单锁的作用范围就在本机内,如果本机外完成与本机相同的操作,那么本机的锁自然是锁不到本机范围之外的主机。简单来说就是单锁的作用范围较小。

单锁的意义,锁的作用就是在进程或线程并行出错的情况下增加限定,让这部分工作退化为串行避免出错。所以,简单来讲,锁的作用就是为了避免并发问题。

单锁的局限:刚才讲了,单锁作用域为本机,而现在的项目体量越来越大,后端服务器可以有多个服务器进行拼接,再通过类似于nginx服务器来进行反向代理实现负载均衡。

也就是说,多个主机都需要执行相同的代码,假设目前代码段A需要上锁,而在分布式服务器部署的情况下使用单锁,比如synchronized,此时服务器1、2、3都第一次接收到相同的指令(完成代码段A的操作),此时由于synchronized的作用域限制,服务器1、2、3完成了获取锁,显然出现了并发问题。

归根结底,synchronized无法适应分布式服务器的原因就是其作用域为其主机对应的JVM。

2.要解决单锁的限制,很简单的联想到,我们不把锁丢给JVM不就行了吗?所以redis分布式锁就出现了。

不谈redisson,我们讲最简单的基于redis的锁如何实现。

再redis中我们有语句setnx,那么我只需要使用setnx即可完成上锁,比如某个功能A需要上锁,那么可以简单的使用语句:setnx lock:A lock来进行上锁。

当其余线程访问这个redis缓存时,也是用setnx lock:A lock,这个语句的返回类型为布尔类型,所以可以简洁的判断是否获取到锁。

释放锁也很方便,只需要讲缓存删掉即可。

http://www.xdnf.cn/news/11999.html

相关文章:

  • AI工程师的武器库:核心技术与实战案例
  • MCP与检索增强生成(RAG):AI应用的强大组合
  • 《Coevolutionary computation and its application》协同演化及其应用中文对照·第一章
  • 告别无效号码,精准营销从空号过滤开始
  • 固定ip和非固定ip的区别是什么?如何固定ip地址
  • Lifecycle 核心原理面试回答
  • DeepSwiftSeek 开源软件 |用于 DeepSeek LLM 模型的 Swift 客户端 |轻量级和高效的 DeepSeek 核心功能通信
  • FTPS、HTTPS、SMTPS以及WebSockets over TLS的概念及其应用场景
  • 部署SD-WAN与现有网络架构的兼容性分析:如何实现平滑集成与避免设备浪费?
  • 夏普比率(Sharpe ratio)​
  • SSL安全证书怎么安装?
  • 数据湖是什么?数据湖和数据仓库的区别是什么?
  • 记一次运行spark报错
  • 【Linux】编译器gcc/g++及其库的详细介绍
  • NumPy 2.x 完全指南【二十四】结构化数组
  • Springboot——整合websocket并根据type区别处理
  • 【25软考网工】第十章 网络规划与设计(1)综合布线
  • 【HarmonyOS 5】生活与服务开发实践详解以及服务卡片案例
  • vue源码解析——diff算法
  • Golang——7、包与接口详解
  • 每天掌握一个Linux命令 - rpm
  • 前端组件推荐 Swiper 轮播与 Lightbox 灯箱组件深度解析
  • day63—回溯—全排列(LeetCode-46)
  • SimpleDateFormat 和 DateTimeFormatter 的异同
  • OpenCV C/C++ 视频播放器 (支持调速和进度控制)
  • MySQL 事务的 ACID 四大特性及其实现原理
  • 【echarts】堆叠柱形图
  • ubuntu自定义服务自动启动
  • Python绘图库及图像类型
  • SARIMA时间序列分析:三大模型对比