当前位置: 首页 > 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,这个语句的返回类型为布尔类型,所以可以简洁的判断是否获取到锁。

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

相关文章:

  • 618浴室柜推荐,小户型浴室柜怎么选才省心?
  • 从实践看理论:Facebook 的隐私保护创新
  • 【Zephyr 系列 8】构建完整 BLE 产品架构:状态机 + AT 命令 + 双通道通信实战
  • TDengine 开发指南——高效写入
  • vue2 项目中 npm run dev 运行98% after emitting CopyPlugin 卡死
  • Leetcode日记
  • 图片压缩工具 | 图片生成PDF文档
  • Flotherm许可安装教程
  • Web后端开发(SpringBootWeb、HTTP、Tomcat快速入门)
  • cocos3.X的oops框架oops-plugin-excel-to-json改进兼容多表单导出功能
  • 算法分析与设计-动态规划、贪心算法
  • stress-ng 服务器压力测试的工具学习
  • 构建 MCP 服务器:第一部分 — 资源入门
  • Promtail采集服务器本地日志存储到Loki
  • MySQL事务:从ACID特性到高并发优化的深度解析
  • Vue.js教学第十九章:Vue 工具与调试,Vue DevTools 的使用与 VS Code 插件辅助开发
  • yFiles:专业级图可视化终极解决方案
  • 融智学的数学基础,通过微分几何的纤维丛结构,构建理论框架模型包含生物层、动物层、心智层、人造物层和人格层五个维度
  • 功能测试、性能测试、安全测试详解
  • Hive终极性能优化指南:从原理到实战
  • wordpress接入微信订阅号/seo哪里可以学
  • 做网站代理好吗/软文范例大全100字
  • 如何在工商局网站做企业年报/seo关键字优化
  • 云南SEO网站建设/软文网官网
  • 成都视频剪辑哪家培训机构好/seo培训资料
  • 做挂网站吗/谷歌关键词推广怎么做