1.幂等性
所谓幂等性,就是说一个接口,多次发起同一个请求,你这个接口得保证结果是准确的,比如不能多扣款,不能多插入一条数据,不能将统计值多加了1。这就是幂等性。
2.如何保证幂等性
①对于每个请求必须有一个唯一的标志,比如订单支付请求,必须要包含订单的id,一个id只能支付一次。
②每次处理完请求之后,必须要有一个记录标识这个请求已经处理过了,比如最常见的是在mysql中记录一个状态,比如支付前先插入一条这个订单的支付流水,而且支付流水采用唯一约束,只有插入成功才进行支付。
③每次接受到请求之后需要先判断之前是否已经处理过,比如一条订单已经支付了,那么就一定会有支付流水,如果存在就表示已经支付过了。
在实际操作中,可以结合自己的业务,比如说用redis用orderId作为唯一键。只有成功插入这个支付流水,才可以执行实际的支付扣款。你就可以写一个标识到redis里面去,set order_id payed,下一次重复请求过来了,先查redis的order_id对应的value,如果是payed就说明已经支付过了,你就别重复支付了。