1.锁在事务内引起的,RR,事务未提交
2.事务传播的链路上不能有异常
3.事务的传播依赖线程,多线程没办法传播
使用Redis锁处理幂等失效的情况
2.幂等性的设计方法
数据库状态更新时先查再更新
数据库悲观锁
- for update有死锁风险,timeout后会释放,这个超时时间怎么搞?
- 请求等待,事务变长
# 乐观锁
唯一索引
- 兜底的
- 考虑软删除,建立联合索引 (orderId, isDeleted) isDeleted=0 没删除, isDeleted>0 已删除
- 性能问题 无法应用 插入缓冲,需要直接刷到磁盘
redo log 节省随机写,转成顺序写 change buffer主要节省随机读的IO消耗
- 实际场景,数据量不是极大的时候,唯一索引是个简单的解决办法
防重表
状态机
分布式锁
# 服务间调用超时问题
幂等 客户端自己查