单机的
synchronized/ReentrantLock只管住一个 JVM。当同一段临界逻辑跑在多个实例上(定时任务防重、库存扣减兜底、唯一资源初始化),就需要一把跨进程的分布式锁。
1. 什么时候真的需要
先泼一盆冷水:能用更简单方案解决的,就不要上分布式锁。
| 场景 | 是否有更简方案 |
|---|---|
| 订单防重复创建 | 有:数据库唯一索引 + 幂等,胜过加锁 |
| 库存扣减 | 有:UPDATE stock = stock - 1 WHERE stock >= 1 原子扣减 |
| 定时任务多实例防重 | 视情况:可走「抢占式」锁或选主 |
| 唯一资源初始化(建表、刷缓存) | 分布式锁合适 |
| 复杂临界区(跨多步有副作用) | 分布式锁合适,但要配幂等 |
2026/10/11大约 7 分钟