news 2026/4/23 14:59:26

19.分布式锁

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
19.分布式锁

在一个分布式系统中,涉及到多个节点访问同一个公共资源的情况,此时就需要通过锁来做互斥控制,避免出现类似于“线程安全”问题。
之前学过的锁本质都只能在一个进程内部生效,分布式系统是有很多进程的(每个服务器都是独立的进程),之前的锁是无法实现进程间的制约。

1.分布式锁场景

两个客户端同时去查询,都查到了余票为1,都执行--操作,最终使得票数剩余-1,这就导致超卖了;

所谓的分布式锁,本质也是一个/一组单独的服务端程序,给其他服务器提供“加锁”这样的服务,给其他服务器提供“加锁”这样的服务(Redis是一种典型实现分布式锁的方案,不是唯一一种);

买票服务器,在进行买票操作过程中,需要先加锁(往redis上设置一个特殊的key-value,完成上述买票操作之后,删除);

setnx可以实现加锁效果,针对解锁,使用del命令完成;
问题:进程内部的锁,进程退了,锁就没了;但是分布式的锁,如果持有锁的服务器掉电,会导致锁无法释放,其他服务器就无法获取到锁了?

解决方法:给set的key设置过期时间,一旦时间到,key就会被自动删除;
需要用:set ex nx这种来设置,如果用setnx+expire,这是无法保证原子的;

问题:如果一个服务器加锁,另一个给它解了?

解决:引入校验机制
1)给服务器编号,每个服务器有一个自己的身份标识;解锁时先查询编号,相同才del;
2)加锁时,设置key-value,key要对应针对哪个资源加锁,value存储服务器编号;

问题:加入了校验机制后,必须要两步才能完成,一步查询、一步del,但这两步操作不能保证是原子的。


虽然看起来这两个服务器执行两次del没有问题,但是如果有第3个服务器,在B执行del前就加锁了,就会把这个锁解了;
解决:引入lua脚本,用lua写一些逻辑,上传到redis服务器上,然后让客户端来控制redis执行上述脚本,redis执行lua的过程,也是原子的(redis官方文档:lua是事务的替代方案);

2.过期时间续约问题

问题:加锁时,设置过期时间多少合适?
设置多了,服务器挂了,很久才释放;
设置少了,服务器还没操作完就自动解锁了;
解决:动态续约,例如:初始设置1s,等到剩余300ms,再把时间续成1s,从此往复;
因此服务器这边需要一个专门的线程来负责续约,这个线程被称为“看门狗”(watch dog);

3.redis挂了

解决:采用主从+哨兵,进行加锁,把key设置到主节点上,主节点挂了,哨兵自动把从节点升级成主节点,进一步保证锁可用;
衍生问题:主从节点数据同步是存在延时的,主节点先收到set还没同步呢就挂了,从节点就没锁了;

解决:redlock算法,采用多组(主从+哨兵);
加锁就按照一定顺序,针对这些组redis加锁,写入key成功超过一半,视为加锁成功;
解锁时,上述主节点都进行一遍解锁;

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 18:02:35

学霸同款2026 9款一键生成论文工具测评:毕业论文写作全攻略

学霸同款2026 9款一键生成论文工具测评:毕业论文写作全攻略 2026年学术写作工具测评:为什么你需要这份榜单? 随着AI技术的不断进步,越来越多的学生在论文写作过程中开始依赖智能工具来提升效率。然而,面对市场上五花…

作者头像 李华
网站建设 2026/4/23 9:20:04

基于自适应特征学习与轻量化网络的旋转机械智能故障诊断

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 成品或定制,查看文章底部微信二维码 (1) 基于逐次变分模态分解与注意力残差网络的轴承故障诊断方法 旋转机械设备…

作者头像 李华
网站建设 2026/4/22 20:56:24

毕业论文AIGC检测率超过20%会怎样?电气专业学长亲历分享

这事我必须说,因为今年真的有人栽在这上面了。 我一个学弟,论文写的是"基于STM32的智能家居控制系统",自我感觉良好,查重12%,稳了。结果学校今年新加了AIGC检测,直接给他标了35%疑似AI生成。 辅…

作者头像 李华
网站建设 2026/4/23 13:58:03

建议收藏!大模型开发必知:10个核心概念详解,从RAG到推理加速,助你成为AI产品专家

本文详解大模型开发的10个核心概念,包括RAG、Agent、函数调用、思维链、向量数据库、量化、蒸馏、LoRA、剪枝和推理加速。每个概念从定义、实现方法和注意事项进行解析,帮助开发者理解AI应用落地的技术栈,做出正确的技术选择。文章还提供原型…

作者头像 李华
网站建设 2026/4/23 12:25:56

DevSecOps工具市场迎来爆发期:国产化与智能化双轮驱动下的产业变革

DevSecOps工具市场迎来爆发期:国产化与智能化双轮驱动下的产业变革 随着数字化转型进入深水区,软件开发领域正在经历一场深刻的安全范式转移。Gartner最新预测显示,到2026年中国DevSecOps工具市场规模将突破78亿元,年复合增长率高…

作者头像 李华