一、什么是幂等?
在分布式系统中有时会出现网络延时等原因导致的重复调用统一服务的情况,而我们往往期望此数据只产生一个结果,无论后面执行多少次所产生的影响都和第一次执行的影响相同。通俗的说,幂等就是针对一个操作,不管做多少次,产生效果或返回的结果都是一样的。
二、幂等的使用场景
1、查询操作:查询一次和查询多次,在数据不变的情况下,查询结果是一样的。select是天然的幂等操作;
2、删除操作:删除操作也是幂等的,删除一次和多次删除都是把数据删除。(注意可能返回结果不一样,删除的数据不存在,返回0,删除的数据多条,返回结果多个) ;
3、更新操作:只是更新值的话,更新操作也是幂等的,累加操作需要注意设计接口,返回值应该是true或false,具体值应该另外提供接口
4、插入操作:需要控制实现其幂等性,因为多次插入会连续插入多条
三、如何实现幂等性
1.使用唯一索引
比如在创建订单的时候,每个单号只能对应一个订单,那么给订单号字段加上一个唯一索引,在新增订单的时候,只能有一个请求成功,剩下的都会抛出唯一索引重复异常。
2.token机制,防止页面重复提交
为了防止因为重复点击或者网络重发。或者nginx重发等情况导致页面重复提交的情况,可以使用token机制使页面的数据只能被点击提交一次
采用token+redis
处理流程:
数据提交前要向服务申请token,token放到Redis或JVM内存