幂等性设计的问题

2023/5/10 redis

1.锁在事务内引起的,RR,事务未提交

2.事务传播的链路上不能有异常

3.事务的传播依赖线程,多线程没办法传播

使用Redis锁处理幂等失效的情况

2.幂等性的设计方法

数据库状态更新时先查再更新

数据库悲观锁

  • for update有死锁风险,timeout后会释放,这个超时时间怎么搞?
  • 请求等待,事务变长

# 乐观锁

唯一索引

  • 兜底的
  • 考虑软删除,建立联合索引 (orderId, isDeleted) isDeleted=0 没删除, isDeleted>0 已删除
  • 性能问题 无法应用 插入缓冲,需要直接刷到磁盘

redo log 节省随机写,转成顺序写 change buffer主要节省随机读的IO消耗

  • 实际场景,数据量不是极大的时候,唯一索引是个简单的解决办法

防重表

状态机

分布式锁

# 服务间调用超时问题

幂等 客户端自己查