4月更文d14n14-基于前端请求携带信息的幂等性处理

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情

基于前端请求携带信息的幂等性处理

前文

之前我们讨论过一种幂等性的补救方案,也就是当系统设计初期没有充分考虑到幂等性时,利用数据库中的唯一字段搭配一个随机字段,通过唯一索引可以达到幂等性效果。那么本文则来讨论另一个种幂等性的实现方案。内容多数为个人理解,难免有不准确之处,还请见谅。

什么是幂等性

老话重谈,什么是幂等性。此处不做深入讲解,简而言之,当相同的请求重复发送时,达到的目标结果一致。尤其是针对在新增时,避免相同的数据反复进行数据库插入,造成数据冗余及数据错误。

利用请求信息进行幂等性处理

切入正题,如果通过请求信息来实现该方案呢?首先来梳理一下该方案的原理,该方案的目标在于当前端请求时,如果是相同的请求,那么请求中会携带相同的token或类似的唯一标识信息,而后端通过对于该标识信息的判断来判断该请求是否已经发生过。具体来说,也就是在网关层中,进行请求的认证。通过redis等其他手段,如果接收到了相同的两个信息,则直接令第二个请求自动失败。该方案也可以通过数据库主键,以唯一键作为数据库主键,通过主键的冲突实现目标的效果。下面着重叙述一下利用redis实现方案的具体过程:

  • 前端发起预先请求,向服务器获取请求token或请求id(当然,该步骤也可以通过在前一次请求结束时,向前端发送下一次请求的数据信息)
  • 服务器收到请求后,在redis中进行token的数据比较。redis中实现存储了token信息,如果redis中存在token则请求正常,继续执行同时删除redis中的token。这时候再次处理下一条相同token的信息时,由于redis中已经查询不到对应的token,则自动认为请求失败,也就实现了请求的幂等性。

下面简单看一下流程图:

image.png

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。

猜你喜欢

转载自juejin.im/post/7086754665433399326
今日推荐