前置简要说明
分布式锁核心目标:分布式集群环境下,保证同一时刻只有一个节点 / 线程执行临界区业务,解决多实例并发争抢资源、防止重复操作、避免数据不一致问题。
常见实现方案:Redis 分布式锁、Zookeeper 临时节点锁、数据库乐观锁 / 悲观锁、etcd 分布式锁。
下面按企业真实业务领域分类,整理落地最多的场景,附带业务风险说明:
一、订单交易领域(电商、零售、供应链最常用)
1. 防止重复下单 / 重复提交
场景:用户快速点击提交订单、网络重试、前端重复请求、网关重试,后端多实例同时收到多条相同下单请求。
问题:不加锁会生成多条相同订单,超卖、重复扣款。
实现:以用户 ID + 商品 ID或前端唯一请求号作为锁 key,下单流程抢占锁。
2. 库存防超卖(经典场景)
场景:秒杀、限时抢购、活动商品扣减库存,服务集群多实例并发扣库存。
风险:单纯数据库
update stock set num=num-1 where num>0乐观锁可解决简单场景;复杂场景(预占库存、分仓库存、多级库存)需要分布式锁控制完整业务流程。
3. 订单状态流转防并发冲突
场景:订单同时收到支付回调、取消订单、超时关单多条消息。
风险:并发更新订单状态,出现「已支付同时被关闭订单」的数据异常。
方案:锁定订单 ID,串行执行状态变更逻辑。
4. 优惠券 / 红包防重复领取
场景:活动红包、满减券,用户多次发起领取请求。
锁维度:用户 ID + 券活动 ID,保证一个用户只能领取一次。
二、定时任务 & 消息调度场景(后台系统、大数据平台高频)
1. 定时任务集群防重复执行
场景:Spring Schedule、XXL-Job 以外自研定时任务;同一个定时任务部署在多个应用实例,到点全部触发。
需求:同一时间只允许一台机器运行任务。
典型业务:每日账单统计、凌晨数据同步、定时清理过期数据、报表生成。
补充:成熟调度框架(XXL-Job、Airflow)内置分片 / 锁机制;自研任务必须引入分布式锁。
2. 消息消费幂等 & 串行消费
防止消息重复消费
MQ(RocketMQ/Kafka/RabbitMQ)重试投递,多个消费者实例收到同一条消息;利用消息 ID 加锁,避免重复执行业务。
有序消息串行处理
同一商户 / 同一订单的多条消息要求按顺序处理,通过业务主键上锁,保证顺序执行。
三、资金、账务、支付清算(金融、财务系统强刚需)
1. 账户余额并发扣减
场景:用户同时发起提现、消费、转账,多请求并发操作同一个账户。
风险:余额计算错乱,出现透支。
小提示:金融核心优先数据库事务 + 乐观锁;跨服务长事务场景搭配分布式锁。
2. 提现防重复处理
第三方支付回调、定时任务扫描待提现记录,多个实例同时处理同一条提现申请,造成重复打款。
3. 对账、清算任务
日终清算、渠道对账,避免多个节点同时启动对账,产生重复对账流水。
四、供应链、仓储、物流业务
1. 商品出库、锁定库存
订单预占库存、拣货出库,多仓库服务实例并发操作库存;防止一单多次出库。
2. 物流运单状态更新
运单揽收、运输、签收消息并发推送,防止状态错乱。
3. 供应商配额管控
采购配额、月度供货额度,并发申请采购时控制总量。
五、资源抢占、限流、业务互斥场景
1. 第三方接口调用互斥
场景:第三方服务商限制同一账号同一时间只能发起一次任务(例如报表导出、数据同步 API)。
多实例同时调用会被第三方限流、封禁,需要分布式锁控制调用频率。
2. 文件 / 资源独占处理
场景:大文件导入导出、OSS 文件解析、数据同步任务。
同一文件不允许多个节点同时解析处理,防止文件损坏、重复导入数据。
3. 设备 / 硬件独占控制(物联网 IoT)
物联网平台:智能设备下发指令,同一设备同一时刻只能执行一条控制指令;
锁 key:设备唯一编号。
六、数据计算、大数据、ETL 场景
1. 数据分片计算互斥
Flink/Spark 离线任务、数据同步 ETL,避免多个实例同时同步同一段分片数据,产生重复数据。
2. 缓存重建防缓存雪崩
缓存失效瞬间大量请求击穿数据库(缓存击穿)。
解决方案:分布式互斥锁,只放行一个线程去更新缓存,其余线程等待,避免大量并发查 DB。
区分:缓存击穿(热点 key 失效)使用分布式锁;缓存雪崩更多依靠过期时间随机打散。
七、租户 / SaaS 多租户系统特有场景
SaaS 平台,多租户隔离:
单个租户的配置批量更新,禁止并发修改租户配置;
租户额度、套餐资源并发扣减;
锁 Key 设计:
tenantId:业务标识。
八、工单、OA、审批流程
工单并发修改:客服同时编辑同一张工单,覆盖彼此修改内容;
审批流并发操作:多人同时审批同一条流程实例,造成流程状态异常;
锁维度:工单 ID、流程实例 ID。
补充:场景选型经验(企业落地避坑)
短事务、高并发互联网业务 → Redis 分布式锁(Redisson)
强一致性、金融核心长流程 → Zookeeper/etcd 分布式锁
极低并发、不想引入中间件 → 数据库乐观锁(优先),谨慎使用数据库悲观锁(性能差)
区分两个容易混淆概念
分布式锁:互斥,同一时间只能一个执行
幂等:允许重复请求,但最终结果只生效一次
很多场景(重复下单、消息消费)同时需要幂等 + 分布式锁,二者不能完全互相替代。
原文链接
欢迎访问 小易撩挨踢