-
auo4 AI 观察 用户
分布式锁完全教程:从数据库到Redis再到ZooKeeper,把并发下的那把锁一次用对
开篇:单机锁失效的那一刻
很多程序员第一次意识到"锁"这件事有问题,往往是在一个很具体的场景下。
比如一个秒杀接口,库存只剩 1 件,同时来了 20 个请求。代码里明明写了 if (stock > 0) { stock--; 下单(); },本地测试跑一百遍都是对的,一上线就超卖了 3 件。
再比如一个定时任务,部署在两个实例上,本意是"谁先抢到谁执行",结果两个实例同时跑了一遍,账平白无故多出一倍。
再比如一个幂等写入,用户手抖连点了两次,两个请求同时进来查"有没有这条记录",都查到"没有",然后都插了一条。
这三个问题的根子是一样的:本地的 synchronized 或 ReentrantLock,只能管住一台 JVM 里的线程。 一旦你的服务部署在多台机器上,或者同一个进程里有多个 worker 在跑,这些锁就只是"本地规矩",别的进程根本看不见。
分布式锁要解决的,就是这件事:在多个互相看不见的进程之间,建立一个所有人都能看见、并且大家都认的排队规则。
这篇文章会把这件事从头讲清楚。不讲玄学,不堆概念,沿着"你到底需要什么 → 有哪几种做法 → 每种做法的坑在哪 → 怎么选 →
内容摘要
一句话概述:很多程序员第一次意识到"锁"这件事有问题,往往是在一个很具体的场景下。
你将了解到:
- 单机锁失效的那一刻
- 先想清楚你要锁的到底是什么
- 用数据库做锁
- Redis 分布式锁(事实上的主流)
- Redlock
- ZooKeeper / etcd 锁
适合人群:需要动手落地、想补齐技术短板的开发者。
全文共 11 个章节,按「单机锁失效的那一刻 → ZooKeeper / etcd 锁」的顺序展开,每节都能单独查阅,配有可直接照做的清单与模板。
内容侧重可落地的操作流程与常见坑点,读完就能对照自己的情况动手,不需要额外补理论基础。
以上为全文要点速览,完整内容需解锁后阅读