接口幂等性设计| 8月更文挑战

01 什么是接口幂等性

接口幂等性就是用户对于同一操做发起的一次请求或者屡次请求的结果是一致的,不会由于屡次点击而产生了反作用。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,可是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条...,这就没有保证接口的幂等性redis

02 基本思路

核心是判断两次请求是否为同一操做。一般方法是解析请求全部参数,判断参数是否彻底一致。若是两次参数同样,则是重复提交。还有是经过惟一索引来判断,如发货操做,一笔订单只能发货一次。因此能够经过惟一订单号来判断两次是否为重复提交。markdown

03 具体实现

  1. 定义幂等性注解,在须要幂等性的接口加上此注解
  2. 项目启动时,扫描幂等性注解,解析具体接口URL,并将URL与幂等性接口一一绑定,生成map对象,以便后续快速根据URL判断此接口是否须要幂等性判断
  3. 新增幂等性拦截器。根据URL判断此请求是否须要幂等性校验(第2步已将数据封装,可快速判断)。
  4. 将请求参数按照特定规则生成key值,根据此Key值,从redis获取具体值,若是为null,则为首次(正常)访问。不然为重复访问,须要过滤此请求。

04 延伸:限流

场景:限制单个用户每一个小时只能访问某个接口100次网络

实现:将用户的每次访问时间记录在redis中,每次访问获取第100前的访问时间。若是未能获取到访问时间,则说明该用户未访问100次。若是获取到时间,则判断该时间是否在一小时内,若是是在一小时内,则该用户须要限流,不能再访问了。若是不在一小时内,则从redis移除该访问记录。spa

相关文章
相关标签/搜索