幂等性:一个用户对同一个操作发起一次或多次请求,请求的结果一致。不会因多次请求产生不同的结果。
接口幂等性校验使用场景
前端提交重复表单:由于网络超时等原因点击多次提交,只能成功一次。(如下单时,界面没有反应,多次点击,其实后端已经收到多次请求,但只会创建一次订单)
常见解决方案
数据库唯一主键
防重Token令牌(重点介绍)
分布式锁
数据库乐观锁
防重token令牌介绍
使用防重token的好处:可扩展性好:使用注解,对于有注解标记的接口拦截器才会起作用。

工作过程:
进入下单界面,前端会自动发请求,后端产生token返回前端,并将token存于redis中。
用户点击“下单”,由于网络原因,点击多次发送多次请求。
拦截器会拦截所有请求,只有成功删除redis中token的请求,才能进入“下单接口”,在数据库中创建订单。
作者曾经使用过的方法:
以支付订单为例,当打开支付页面时前端生成一个uuid存到本地 同时将这个uuid存到redis中,提交请求时自定义切面类会拦截添加了自定义注解check idempotent的方法,从请求头中获取token,校验token中的uuid是否相符,如果相符则到redis中删除uuid(uuid为key)然后将其放行执行后续操作,其他的请求则打回,返回提示信息。
评论区