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

分布式锁原理

1.锁是什么

一个线程拿到锁,另一个线程就拿不到,满足互斥性。

2.Redis的setnx实现

加锁后解锁,但是要先判断是否是当前线程持有的锁,只能释放本线程的锁。

先判断后释放,两步操作Lua实现原子性

3.为什么要给锁加过期时间

如果持有锁的线程挂了,锁过期自动释放,避免其他线程一直阻塞。

4.线程还没执行完业务,但是锁超时释放了,引入看门狗机制

定时给锁续时间

看门狗线程设置为守护线程,如果业务线程挂了,看门狗也会挂

5.为什么要有锁的重入

递归调用的时候使用,如果是一个线程持有的锁,那么可以重入

synchronized内部有计数器:持有+1,释放-1

ReentrantLock基于AQS,AQS内部有一个state计数器记录 

6.分布式锁的实现

 redission底层(hsetnx):redis的hash结构:要锁的业务是Key

                                                                          线程id+UUID=field(集群环境线程id可能重复)

                                                                           重入次数为value  

  用redis的String结构,在服务器内部维护CoucurrentHashMap,map的value计数

7.阻塞线程如何拿到锁

ReentrantLock自旋

redission订阅发布:先订阅锁,锁释放后发送订阅信号,阻塞线程可以持有锁

8.主从节点不同步问题

主节点挂了,重新选的从节点升为主节点,但是没有setnx锁信息,就会误判没加锁。

红锁:半数以上的节点加锁才算枷锁成功,满足互斥性

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

相关文章:

  • Linux 信号终篇(总结)
  • OpenAI API JSON 格式指南与json_repair错误修复
  • 深入理解卷积神经网络的输入层:数据的起点与预处理核心
  • [Pandas]数据处理
  • MySQL 从入门到精通(六):视图全面详解 —— 虚拟表的灵活运用
  • PyTorch量化感知训练技术:模型压缩与高精度边缘部署实践
  • TDengine 在智能制造中的核心价值
  • 工控新宠| 触想Z系列工控机C款发布,方寸机身,智控万千
  • OSPF综合实验实验报告
  • 深度学习篇---MediaPipe 及其人体姿态估计模型详解
  • 广东省省考备考(第七天5.10)—言语:片段阅读(每日一练)
  • Vue插槽(Slots)详解
  • SkyReels-V2 视频生成
  • Cadence 高速系统设计流程及工具使用三
  • 加速pip下载:永久解决网络慢问题
  • 数据集-目标检测系列- 冥想 检测数据集 close_eye>> DataBall
  • AI实战笔记(1)AI 的 6 大核心方向 + 学习阶段路径
  • Linxu实验五——NFS服务器
  • WordPress插件targetsms存在远程命令执行漏洞(CVE-2025-3776)
  • 20250510-查看 Anaconda 配置的镜像源
  • redis未授权访问
  • [架构之美]从零开始整合Spring Boot与Maven(十五)
  • AUTODL Chatglm2 langchain 部署大模型聊天助手
  • C语言初阶秘籍6
  • 二分法和牛顿迭代法解方程实根,详解
  • 第十九节:图像梯度与边缘检测- Laplacian 算子
  • 「OC」源码学习——cache_t的原理探究
  • C32-编程案例用函数封装获取两个数的较大数
  • IPFS与去中心化存储:重塑数字世界的基石
  • nuscenes_devkit工具