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

单锁与分布式锁

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.lqws.cn/news/142075.html

相关文章:

  • 【学习记录】Linux 密码破解实战
  • 【Vue】初学Vue(setup函数,数据响应式, 脚手架 )
  • Mybatis入门到精通
  • GO语言----基础类型取别名
  • 2025 Vscode插件离线下载方式
  • HOPE800系列变频器安装到快速调试的详细操作说明
  • Python-多线程
  • Python训练打卡Day42
  • 【DVWA系列】——Brute Force(暴力破解)——low
  • C++抽象类与多态实战解析
  • Python-多线程(一)
  • 2025.6.4总结
  • URL 结构说明+路由(接口)的认识
  • 卡西欧模拟器:Windows端功能强大的计算器
  • WireShark相关技巧
  • 【趣味Html】第11课:动态闪烁发光粒子五角星
  • [特殊字符] 革命性AI提示词优化平台正式开源!
  • 近期调试有感
  • 爬虫学习记录day1
  • 《短线追涨与低吸技术》速读笔记
  • 使用cephadm离线部署reef 18版并配置对接openstack
  • C语言-指针基础概念
  • Vue 生命周期全解析:从创建到销毁的完整旅程
  • OD 算法题 B卷【查找舆情热词】
  • el-amap-bezier-curve运用及线弧度设置
  • 构建高效可靠的电商 API:设计原则与实践指南
  • Oracle数据库笔记
  • 智能合约安全漏洞解析:从 Reentrancy 到 Integer Overflow
  • 嵌入式系统中常用的开源协议
  • LeetCode 热题 100 739. 每日温度