Skip to content

B端出货加锁方案评审 ​

会议时间:2026-05-22

发言人:张喜、邱毅、王建朝、陈德智、宋洋等12人

会议摘要:本次会议评审了 B 端出货加锁技术方案,重点敲定了基于 Redis 的分布式锁机制及 MongoDB 分片策略,明确了过期清理与归档策略,并确定了后续集成测试与发版计划。

一、核心锁定与防重机制 ​

针对防止"一码多出"的业务痛点,会议确认了以数据库唯一索引为基础,结合缓存锁的并发控制方案:

  • 分布式锁实现:采用 Redis 实现码级别的并发锁,确保同一时间同一码仅能被一人扫描占用。
  • 数据库唯一约束:将二维码(Code)作为 MongoDB 的主键 ID 存储,利用其天然唯一性在数据库层面拦截重复插入。
  • 状态流转逻辑:扫码接口同步返回结果,成功即落库;若后端已入库但前端超时未收到响应,二次扫码时会提示"已被占用",由服务端保证幂等性。

二、过期清理与归档策略 ​

  • 定时任务清理:设置 5 分钟执行一次的定时任务,对超过配置时间的记录进行清理。
  • 整单过期逻辑:按订单维度分组,取组内最大过期时间为该单的最终过期时间,超出阈值则自动删除锁码记录并归档至历史表。
  • 容错时间窗口:为防止临界点操作问题,系统设置了 10 分钟的缓冲时间(可配置),允许用户在过期后短时间内仍可提交。

三、分片与查询优化 ​

  • 分片键选择:采用收货码(Receipt Code)或出货单号作为分片键,确保同一订单下的数据分布在同一个物理节点,提升批量操作效率。
  • 查询接口优化:提供按单号分页查询锁码记录的接口,支持前端展示倒计时及被占用的用户信息。

四、待办事项 ​

  • 准备 Demo 数据演示"不加容错时间"导致的极端差异场景,以便产品侧评估容错时间的合理性。@张喜 @金策
  • 在下周一下午组织一次上线前的代码走查会,覆盖 528 版本的所有改动点。@张喜 @王建朝
  • 在技术文档中补充关于"出货加锁"与"自主签收"共用分布式锁 Key 的设计规划,预留扩展性。@张喜