前言:本章主要解决我们在 *** 作表单(更新)数据造成多次点击提交,数据库添加多条数据问题!!
解决方式:使用幂等的方式保证一次和多次的请求结果一致幂等性介绍
幂等性的概念 : 任意多次执行所产生的影响都与一次执行产生的影响相同
意思就是说对数据库的影响只能是一次性的,不能重复处理
为什么使用幂等性?
在系统高并发的环境下,很有可能因为网络,阻塞等等问题导致客户端或者调用方并不能及时的收到服务端的反馈甚至是调用超时的问题,即请求方调用了你的服务,但是没有收到任何的信息,完全懵的状态。
比如订单的问题,可能会遇到如下的几个问题:
创建订单时,第一次调用服务超时,再次调用是否产生两笔订单?
订单创建成功去减库存时,第一次减库存超时,是否会多扣一次?
订单支付时,服务端扣钱成功,但是接口反馈超时,此时再次调用支付,是否会多扣一笔呢?
以上三种情况,都不太合适,因此需要使用幂等性保障对数据库的影响只能是一次性的,不能重复处理
主要分享以token机制解决重复提交数据问题
Redis实现自动幂等性原理(下图)
1 .(controller层代码) 创建生成token,并携带token跳转页面
@GetMapping("addSimple")//跳转到注册页面 public String add(Model model) { UUID token = UUID.randomUUID();//创建唯一id model.addAttribute("token", token);//产生token return "addSimple"; }
2.(页面代码html/jsp) ajax提交携带存入的token传入后端
评论列表(0条)