实现无锁
放弃锁并不意味着放弃隔离性(实现事务隔离的方法有多种)。
- 避免事务进入回滚
即要求业务不管出现什么情况,只能继续朝事务处理流程的正向继续处理!(不断重试?)
- 避免事务进入回滚
-
- 辅助业务变化明细表
规避数据访问热点:
-- 避免所有事务对同一数据表进行更新操作(造成热点),使得不同事务中处理的数据互补干扰!
-- 如秒杀和大促场景:
- ① 订单生成,记录“库存预减明细表”,不更新主表库存;
- ② 订单付款成功,更新主表库存,(删除预减库存明细表相应记录?或改状态?);《至少规避了热点?》
- ③ 付款之前获取商品库存需要计算;
- 辅助业务变化明细表
- 使用乐观锁,避免悲观锁
乐观锁是基于数据版本记录机制,即常用的seq。查询时拿到seq,更新时带seq更新(条件),并更新seq,+1。更新不成功则失败处理。(宁可更新失败,规避悲观锁)
-- 这种处理方式需要慎重评估??
- 使用乐观锁,避免悲观锁