高并发下的接口幂等性解决方案 一、背景 我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如: 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱; 发送消息,也...
幂等性定义接口幂等性(Idempotency)指的是无论一个请求被执行多少次,服务器的结果和状态始终一致,不会产生副作用。 举例: HTTP 的GET方法天然幂等,查询用户信息多次结果不变。 HTTP 的POST方法默认非幂等,重复创建资源会导致重复数据。 幂等性的重要性 容错能力:网络不稳定导致重复请求,幂等性可以避免数据混乱。 分布...
插入(INSERT)和修改(UPDATE)方法是非幂等性的,需要通过机制在需要的场景处理以确保多次执行无副作用。 删除(delete)执行一次或多次都是结果为空(即结果一致),并且无副作用,所以在根据主键ID删除可以认为是(伪)幂等性的,根据非主键删除的如果多次执行无副作用(都是把数据删除),也可以认为是(伪)幂等性。 三、幂等...
5-幂等性解决方案案例实现 5-1-基于Token机制的实现 5-1-1-实现思路 为需要保证幂等性的每一次请求创建一个唯一的标识token,先获取token,并将此token存入到redis,请求接口时,将此token放在header或者作为请求参数请求接口,后端接口判断redis中是否存在此token; 如果存在,则正常处理业务逻辑,并从redis中删除此token,...
二. 接口幂等性-解决方案 1. 前端防重 通过前端防重保证幂等是最简单的实现方式,前端相关属性和JS代码即可完成设置。 常用的方案:点击按钮,发出请求,此时按钮变为不可点的状态,只有拿到返回结果后,才可以继续点击。(该方案只能一定程度上环节一下) 弊端:比如可以刷新一下页面,或者重新进入,就可以继续点击了。
本文采用第2种方式实现, 即通过redis + token机制实现接口幂等性校验 四、实现思路 为需要保证幂等性的每一次请求创建一个唯一标识token, 先获取token, 并将此token存入redis, 请求接口时, 将此token放到header或者作为请求参数请求接口, 后端接口判断redis中是否存在此token: ...
1、接口中有更新操作 2、接口中有新增操作 三、需要保证接口幂等性的场景 1、微服务相互调用 2、消息重复消费 3、前端重复提交 四、常见解决方案 1、前端限制 2、数据库唯一约束 3、唯一标识 4、其他 一、什么是接口幂等性 客户端同一操作发起的一次或多次请求的结果是一致的,不会因为多次点击、网络异常、重试机...
3. 详细描述至少一种Java接口幂等性解决方案的实现步骤(以Token机制为例) Token机制实现步骤: 生成Token:客户端在发起请求前,向服务端请求一个唯一的Token。 存储Token:服务端生成Token后,将其存储在一个全局的Token存储系统中(如Redis)。 请求携带Token:客户端在后续的请求中携带这个Token。 验证Token:服务端在...
时间:在时间上也会对幂等性设置有效期。对于某些业务场景,如下单和支付等,需要保证幂等性的永久性。而对于其他场景,则只需要在一段时间内保证幂等性。通常,使用幂等性会伴随着锁的概念,以解决并发安全问题。什么是接口幂等性 幂等性描述了对某一资源进行一次或多次请求所产生的结果应该是相同的(排除网络超时等...
要做到幂等性,从接口设计上来说不设计任何非幂等的操作即可。譬如说需求是:当用户点击赞同时,将答案的赞同数量+1。改为:当用户点击赞同时,确保答案赞同表中存在一条记录,用户、答案。赞同数量由答案赞同表统计出来。 总之幂等性应该是合格程序员的一个基因,在设计系统时,是首要考虑的问题,尤其是在像支付宝,银行,...