防止重复提交——幂等接口的思想
防止重复提交——幂等接口的思想
网络中有发生拥堵导致反馈不及时,用户一直点击提交的情况,一直点提交,所有的表单信息都是一样的,这样就会创建出多个事务出来,如创建多个一模一样的订单,多个一模一样的用户,为了防止此类事件发生,引入一种思想“幂等”
[!note]
何为幂等?通俗来说:多次执行某操作与仅执行一次此操作的效果相同,比如注册业务,多次点击注册提交和点击一次注册提交的效果一样,数据库只会多出来一条记录
-
第一阶段
当用户进入提交页时,主动发请求到后台获取后台提供的一个UUID并将此UUID存入本地,当用户提交表单时,把此UUID封装到表单里一起提交,后台接收到请求,验证UUID是否在数据库(Redis)中存在,因为这是第一次提交,所以不存在,则往后执行业务,业务执行完成后将此UUID写入Redis,最后返回结果
-
第二阶段
这时因为网络原因,用户迟迟没有收到返回结果,于是用户又点击一次提交,后台收到请求后照例去Redis中查UUID,发现UUID已经存在了,便不再执行后续业务代码,并把“重复提交”写入返回结果中
-
第三阶段
用户收到了含有“重复提交”的返回结果,退出界面,退出界面前给后台发送一个删除UUID的请求,请求requestbody中携带UUID,后台接收到请求,并去Redis中删除这个UUID,并返回成功的response,前台收到这个response后,清除前台的UUID。
至此,幂等性接口就实现了,当然我不建议后台把UUID写入MySQL,因为UUID是一个不会长时间保留的数据,对于大流量的请求,很可能给MySQL过高压力。
我强烈建议在一些常用的接口,涉及到数据库增,删,改的业务都用到幂等性的思想,毕竟数据的正确度是极其重要的
本文来自博客园,作者:勤匠,转载请注明原文链接:https://www.cnblogs.com/JarryShu/articles/18280554
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现