📚 分类
spring cloud
🕵🏽‍♀️ 问题描述
分布式服务的接口幂等性如何设计?
👨‍🏫 问题讲解
幂等: 多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。

❒ 需要幂等场景

✔ 用户重复点击(网络波动)
✔ MQ消息重复
✔ 应用使用失败或超时重试机制

❒ 基于RESTfuIAPI的角度对部分常见类型请求的幂等性特点进行分析

✔ GET 查询操作,天然幂等
✔ POST 新增操作,请求一次与请求多次造成的结果不同,不是幂等的
✔ PUT 更新操作,如果是以绝对值更新,则是幂等的。如果是通过增量的方式更新,则不是幂等的
✔ DELETE 删除操作,根据唯一值删除,是幂等的

❒ 数据库唯一索引(新增)

❒ token + redis (新增、修改)

1. 加载提交页面时返回token
2. 提交请求时带上token,与后端对比,成功后删除token
3. 再次请求时token不存在,拦截请求

❒ 分布式锁 (新增、修改)

1.先抢到锁的执行,执行完毕后释放锁。
2.后抢到锁的请求拦截
🏳️‍🌈 问题总结
❒ 幂等: 多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致

✔ 如果是新增数据,可以使用数据库的唯一索引
✔ 如果是新增或修改数据

▣ 分布式锁,性能较低

✔ 使用token + redis来实现,性能较好
✔ 第一次请求,生成一个唯-token存入redis,返回给前端
✔ 第二次请求,业务处理,携带之前的token,到redis进行验证,
✔ 如果存在,可以执行业务,删除token;如果不存在,则直接返回,不处理业务
📖 问题信息
📈 浏览次数:11 | 📅 更新时间:2025-12-04 01:48:21
📦 创建信息
🏷️ ID:66 | 📅 创建时间:2024-10-28 23:53:44