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

zookeeper分布式锁 -- 读锁和写锁实现方式

读锁和写锁

读锁: 是共享锁,读锁与读锁是可以兼容的,所以同时有多个请求都可以持有

写锁: 是独占锁,写锁与任何锁都互斥,所以只有一个请求持有,这个请求释放写锁其他请求才能持有

一旦持有写锁,说明数据在发送变化就不能读了,自然一个请求就不能出现读锁和写锁共存的情况

总结: 读锁与读锁之间兼容,其他都是互斥

读写锁的实现逻辑转换如下

读锁: 请求要判断是否可以持有共享资源的读锁,需要判断之前是否有请求持有这个共享资源的写锁

写锁: 请求要判断是否可以持有写锁,需要判断是否有请求持有这个共享资源的读锁或者写锁,就是没有请求持有这个共享资源的任何的锁

zookeeper区分分布式锁

区分是那个共享资源的锁,是通过zookeeper路径来区分的
区分一个共享资源是读锁还是写锁这种锁的类型,是通过zookeeper节点名的前缀来区分的

zookeeper实现分布式写锁

1、请求过来的时候都会创建一个临时序号节点

2、获取zookeeper中所有的临时序号节点

3、判断自己是否是最小的节点

        如果是,说明在这个请求之前是没有其他请求获取并持有这个共享资源的读锁或者写锁,目前共享资源访问的第一个请求,我可以获取并持有这个共享资源的写锁

        如果不是,说明已经有请求在我之前获取并持有这个共享资源的写锁或者读锁了,前面有请求获取到写锁或者读锁,我都互斥,自然就获取写锁失败

        获取锁失败之后,监听最小的临时序号节点,如果最小的临时序号节点出现变化,则回到第二步进行执行

zookeeper实现分布式读锁

1、请求过来的时候都会创建一个临时序号节点

2、获取到zookeeper中比自己序号小的所有临时节点

3、判断最小节点是否为读锁(根据写锁的实现原理可知,如果写锁存在,必然是最小临时序号节点)

        如果是读锁,说明这个共享资源目前没有请求持有写锁,直接获取并持有读锁

        如果不是读锁,说明目前第一个请求持有写锁,读锁写锁互斥,获取并持有读锁失败

        获取读锁失败之后,监听最小的临时序号节点,如果最小的临时序号节点出现变化,则回到第二步进行执行

        

http://www.lryc.cn/news/608816.html

相关文章:

  • 【Android】RecyclerView循环视图(2)——动态加载数据
  • 【C 学习】04-了解变量
  • 《volatile 与 synchronized 底层实现与性能比较》
  • 【OD机试题解法笔记】文件缓存系统
  • linux 扩展未分配的磁盘空间到home下
  • 【从零开始速通C语言1】 - 汇编语言1
  • RAG 知识库实战指南:基于 Spring AI 构建 AI 知识问答应用
  • 第N个泰波那契数
  • Coze 打通飞书多维表格,实现数据增删改查操作实战详解
  • 机器学习sklearn:支持向量机svm
  • 《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——9. 接入真实硬件:驱动USB摄像头
  • 李宏毅深度学习教程 第8-9章 生成模型+扩散模型
  • 【Unity3D实例-功能-镜头】俯视角
  • JVM-垃圾回收器与内存分配策略详解
  • [创业之路-530]:创业公司五维架构设计:借鉴国家治理智慧,打造敏捷型组织生态
  • 智变时代:AI 如何重构工作边界与行业生态?
  • 【MySQL安全】什么是SQL注入,怎么避免这种攻击:前端防护、后端orm框架、数据库白名单
  • 计算机网络:如何在实际网络中进行子网划分
  • 从零开始学Express,理解服务器,路由于中间件
  • C#模式匹配用法与总结
  • Supergateway教程
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现各类垃圾的分类检测识别(C#代码UI界面版)
  • 玩转 Playwright 有头与无头模式:消除差异,提升爬虫稳定性
  • LLM - 智能体工作流设计模式
  • 小红书开源dots.ocr:单一视觉语言模型中的多语言文档布局解析
  • 【设计模式】5.代理模式
  • [LeetCode优选算法专题一双指针——有效三角形的个数]
  • Python 程序设计讲义(60):Python 的函数——递归函数
  • 从“配置地狱”到“云端乐园”——Nacos 如何成为分布式微服务配置中心的“定海神针”
  • 【MySQL】MySQL中锁有哪些?