B端出货加锁方案评审
会议时间:2026-05-22
发言人:张喜、邱毅、王建朝、陈德智、宋洋等12人
会议摘要:本次会议评审了 B 端出货加锁技术方案,重点敲定了基于 Redis 的分布式锁机制及 MongoDB 分片策略,明确了过期清理与归档策略,并确定了后续集成测试与发版计划。
一、核心锁定与防重机制
针对防止"一码多出"的业务痛点,会议确认了以数据库唯一索引为基础,结合缓存锁的并发控制方案:
- 分布式锁实现:采用 Redis 实现码级别的并发锁,确保同一时间同一码仅能被一人扫描占用。
- 数据库唯一约束:将二维码(Code)作为 MongoDB 的主键 ID 存储,利用其天然唯一性在数据库层面拦截重复插入。
- 状态流转逻辑:扫码接口同步返回结果,成功即落库;若后端已入库但前端超时未收到响应,二次扫码时会提示"已被占用",由服务端保证幂等性。
二、过期清理与归档策略
- 定时任务清理:设置 5 分钟执行一次的定时任务,对超过配置时间的记录进行清理。
- 整单过期逻辑:按订单维度分组,取组内最大过期时间为该单的最终过期时间,超出阈值则自动删除锁码记录并归档至历史表。
- 容错时间窗口:为防止临界点操作问题,系统设置了 10 分钟的缓冲时间(可配置),允许用户在过期后短时间内仍可提交。
三、分片与查询优化
- 分片键选择:采用收货码(Receipt Code)或出货单号作为分片键,确保同一订单下的数据分布在同一个物理节点,提升批量操作效率。
- 查询接口优化:提供按单号分页查询锁码记录的接口,支持前端展示倒计时及被占用的用户信息。
四、待办事项
- 准备 Demo 数据演示"不加容错时间"导致的极端差异场景,以便产品侧评估容错时间的合理性。@张喜 @金策
- 在下周一下午组织一次上线前的代码走查会,覆盖 528 版本的所有改动点。@张喜 @王建朝
- 在技术文档中补充关于"出货加锁"与"自主签收"共用分布式锁 Key 的设计规划,预留扩展性。@张喜