这是经常会遇到的问题,比如有以下场景:
  项目中有B端和C端两个库,两者进行双向同步,B端修改商品库存时C端同时下单,这时候应该怎么解决数据冲突问题?

库存预占

  C端下单时先锁定库存(非直接扣减),生成预占记录并设置超时时间(如15分钟)。支付成功后转为正式扣减;超时则释放库存。而B端修改库存时(如调拨、盘点),只能操作​​非预占状态​​的库存,避免与订单冲突。

redis分布式锁

  对同一商品ID的操作(B端修改或C端下单)需先获取分布式锁,确保同一时间仅一个操作生效

// 伪代码示例:使用Redis锁
String lockKey = "product_lock:" + productId;
String requestId = UUID.randomUUID().toString();
if (redis.setnx(lockKey, requestId, 30)) { // 锁超时30秒
    try {
        // 执行库存操作
    } finally {
        redis.releaseLock(lockKey, requestId); // 释放锁
    }
}
最后修改:2025 年 06 月 10 日
如果觉得我的文章对你有用,请随意赞赏