使用redis本身的原子性操作库储存。
// redis会返回操作之后的结果,这个过程是原子性的Long currStock = redisTemplate.opsForHash().increment("key", "stock", -1);if (currStock < 0) { // 说明库存已经扣减完了。// 业务异常。log.error("[抢购下单] 无库存");} else {// 生成订单// 发布订单创建成功事件// 构建响应}
Long currStock = redisTemplate.opsForHash().increment("key", "stock", -1);
if (currStock < 0) { // 说明库存已经扣减完了。
// 业务异常。
log.error("[抢购下单] 无库存");
} else {
// 生成订单
// 发布订单创建成功事件
// 构建响应
}