常见场景题-幂等性该如何设计?

幂等性如何设计?

答:幂等性的设计有以下几种方案:

方案一:唯一索引或唯一组合索引

对订单的幂等性设计,可以使用订单号作为唯一索引,这样如果多次插入的话,就会报错 DuplicatedKeyException, 那么我们就可以捕获该错误,来返回友好提示。

方案二:基于 Redis setnx

使用 Redis 的 setnx 来进行实现幂等性,setnx 如果设置成功,表示第一次来请求,如果设置失败表示重复请求,setnx 设置时也记得设置过期时间

方案三:Token + Redis

针对调用方重试接口的情况,例如重复提交订单,这种幂等性设计可以使用 Token 机制来防止重复提交。

调用方在调用接口时,先向后端请求一个 Token,该 Token 存储在 Redis 中并设置过期时间,在调用时携带上 Token(放入Header存储),后端在 Redis 中检查该 Token 是否存在,如果存在表示是第一次请求,删除token中的缓存**(使用 lua 脚本,保证操作的原子性)**,如果不存在,表示重复请求,直接返回。

如果第一次调用接口失败了,可以通过设计来重新生成 token,再次尝试调用。

java 复制代码
public void invoke(){
  String token = genToken();
  // 提交订单信息
  submitOrder(token, order);
}
相关推荐
没有bug.的程序员1 小时前
服务治理与 API 网关:微服务流量管理的艺术
java·分布式·微服务·架构·wpf
Guheyunyi2 小时前
风险感知中枢:监测预警系统的架构与核心
大数据·运维·安全·重构·架构·自动化
东城绝神2 小时前
《Linux运维总结:基于X86_64+ARM64架构CPU使用docker-compose一键离线部署consul 1.21.5容器版集群》
linux·运维·docker·架构·consul
shinelord明3 小时前
【大数据技术实战】Kafka 认证机制全解析
大数据·数据结构·分布式·架构·kafka
文火冰糖的硅基工坊4 小时前
[创业之路-702]:“第三次”与“第四次工业革命”的范式跃迁
大数据·人工智能·科技·嵌入式硬件·架构·嵌入式·gpu
粘豆煮包4 小时前
系统设计 System Design -4-2-系统设计问题-设计类似 TinyURL 的 URL 缩短服务 (改进版)
设计模式·架构
落言6 小时前
AI 时代的工程师:懂,却非懂的时代
前端·程序员·架构
笨手笨脚の7 小时前
微服务核心
微服务·架构·服务发现·康威法则
文火冰糖的硅基工坊8 小时前
[嵌入式系统-136]:主流AIOT智能体软件技术栈
嵌入式硬件·架构·嵌入式·cpu·gpu
JanelSirry9 小时前
微服务是不是一定要容器化(如 Docker)?我该怎么选
docker·微服务·架构