方案一:数据库乐观锁
乐观锁通常实现基于数据版本(version)的记录机制实现的,比如有一张红包表(t_bonus),有一个字段(left_count)记录礼物的剩余个数,用户每领取一个奖品,对应的left_count减1,在并发的情况下如何要保证left_count不为负数,乐观锁的实现方式为在红包表上添加一个版本号字段(version),默认为0。
异常实现流程
-
-- 可能会发生的异常情况
-
-- 线程1查询,当前left_count为1,则有记录
-
select * from t_bonus where id = 10001 and left_count > 0
-
-- 线程2查询,当前left_count为1,也有记录