HTTP/接口幂等性与解决方案

article/2025/11/7 4:29:58

幂等性

    • 一:什么是幂等性:
    • 二:数据访问的幂等性:
      • 2.1:增加操作:
      • 2.2:删除操作:
      • 2.3:更新操作:
    • 三:幂等性的解决方案:
      • 3.1:前端幂等性的实现:
      • 3.2: 后端幂等性的实现:

一:什么是幂等性:

  • 1:方法调用一次和调用多次得到的结果是一样的,则称为方法是幂等的。

  • 2:HTTP幂等性:资源请求一次,或者多次产生的副作用是相同的。

    • 例如: 我们发送1次get请求,获取一个ok,与发送100次请求,获取这个ok,效果是一样的,都是得到一个ok,中间没有给服务器带来任何压力,也没有修改数据库,因此我们称这个get请求是幂等的。(不是强调结果是否相同,而是副作用是否相同
  • 3:HTTP中的请求是不是幂等的呢?

    • GET获取请求, 是幂等的。
      • 请求一次,与请求多次,不会对后端造成任何影响。
    • DELECT删除请求, 是幂等的。
      • 删除一次,与删除多次,结果都是被删除了。
    • POST请求创建资源,不是幂等的。
      • 两次创建操作,会对在后台创建两个不同的资源,因此不是幂等的。
    • PUT请求更新资源, 是幂等的。
      • 更新一次,与更新多次(数据相同), 得到的结果都是被更新后的。
  • 4: 应用角度----幂等性场景:

    • 1:因为网络波动,引起重复请求。
      • 案例:例如收藏(取消收藏)请求,我们请求了一次,因为网络原因,我们一直没有返回响应,用户由于没有看到被收藏了,结果再次点击收藏,而两次点击收藏导致我们后端仍处于未收藏状态,影响了幂等性。
    • 2: 用户重复操作,导致重复扣款,重复下单等问题。
      • 例如: 双十一,用户下单请求,提交一次后,由于网络堵塞,用户点击了刷新,导致相同订单重复请求,则会导致数据库中存在两个订单。
    • 3:应用中使用了超时,重试机制。
      • Nginx重试, RPC框架重试, 业务层面重试等。
    • 4:第三方平台接口(支付宝),异步回调。
      • 例如: 支付宝支付完成后,支付宝会调用我们后台接口,证明支付完成,但是,由于异常,支付宝调用了两次我们后台,则导致我们后台扣款了两次,实际支付宝只扣款一次。
    • 5: 页面刷新, 回退按钮,导致重复提交表单。
      • 例如:学校网站问卷调查统计,再提交时,由于网络延时,或者后端反应过慢,导致用户重新刷新,重新提交表单,则导致问卷多出一份。
    • 6:定时任务导致重复执行。
    • 7: 多核浏览器问题:
      • 某些版本的浏览器,请求一次,发送两次请求。

二:数据访问的幂等性:

  • 幂等性设计的地点:由于都是对于数据库数据进行操作,才设计幂等性,因此我们要在访问数据库之前做幂等性设计。
  • 读请求,显然不需要设计幂等性。
  • 写请求,增删改需要设计幂等性。

2.1:增加操作:

  • insert操作: 例如: insert into student(id, name, age, sex);
    • 如果是自增主键,则会出现幂等性问题,因为两次都可以插入。
    • 如果给 name, age, sex,设置唯一索引,则不会出现幂等性问题, 因为数据库会报错。

2.2:删除操作:

  • delect 操作:
    • 相对删除:删除前20条数据, 会出现幂等问题。
    • 绝对删除:删除id是1的数据, 不会出现幂等问题。

2.3:更新操作:

  • 相对更新:将id为1的价格增加100, 此时不是幂等的。
  • 绝对更新:将id为1的价格修改成100, 此时是幂等的。

三:幂等性的解决方案:

3.1:前端幂等性的实现:

  • 1:按钮设置成只能操作一次, 防止用户重复提交。

    • 例如提交按钮,点击后,前端变成灰色,不能再次点击了。
  • 2: tocken机制, 防止重复提交。:

    • 例如: 当请求某个页面的时候,我们后端生成一个token,将这个token存放在页面中一起返回给前端, 前端进行提交时,携带上页面中的token,后端取出前端携带的token和后端保存的token,两个进行比较,如果token一致,则表示第一次提交,则删除后端的token。如果发现前端携带的token,我们后端不存在,则表示不是第一次提交,则返回响应,重复提交。
  • 3: Post/Redirect/Get(PRG)模式:

    • 例如: 前端当用户提交后,立刻发出一个请求,请求发送成功的页面。这样避免用户刷新页面导致重复提交,也不会出现浏览器提示重复提交的警告,而且也消除了因为前进和后退导致重复提交的问题。
  • 4:在Session中存在特殊标志:

    • 案例: 与token机制相同, 我们可以在服务端生成一个唯一标识,将他存入到session中,将session中的唯一标识也写入到隐藏表单中,将表单返回给客户端。客户端提交信息时,后端根据session_id拿到session信息,与表单中的session信息比对,如果相同则删除服务端中的session中的唯一标识,如果找不到,说明不是第一次提交则返回重复提交。

3.2: 后端幂等性的实现:

  • 1: 使用唯一索引防止幂等性问题:

    • 建立唯一索引后,插入数据如果出现重复的,则会抛出异常,因此可以防止幂等性。
  • 2:ToKen + Redis幂等性方案:

在这里插入图片描述

  • 3:状态机幂等:

    • 针对某些更新操作, 比如业务中需要修改订单状态:待支付状态, 支付中, 支付成功, 支付失败,订单超时等。
    • 在进行接口的设计时,我们最好只支持状态的单向改变,例如更新成 status = 1;这样即使多次,状态也不会改变。
  • 4:乐观锁实现幂等:

    • 先查询出被更新的信息,得到版本version = 1
    • 通过版本号进行更新,如果版本号匹配,说明之前没有改变,则进行更新,如果版本号不匹配则说明已经操作过了,无需再进行操作。
  • 5:防重表实现幂等性:

  • 我们要增加一个表,这个表叫做防重表。这个防重表中有一个字段,这个字段是一个唯一索引。案例我们下订单,我们每次下一个订单,就向防重表中增加一个数据,如果订单id重复了,则表示第二次加入这个订单,则返回重复提交。

  • 6: select + insert方案:

    • 在进行插入操作之前先查询一下是否改变了,这种方案单机条件可以,但是分布式下不可以。
  • 7: 分布式锁方案:

    • 尝试获取分布式锁,如果获取到了,则进行业务逻辑,如果没有获取到,则返回请稍后再试。

在这里插入图片描述

  • 8: 缓冲队列解决幂等性:

    • 我们后端将所有的请求都保存到缓冲队列中, 然后使用异步任务处理里面的请求,异步任务中过滤掉重复的请求。
  • 9:全局唯一号实现幂等:

    • 在执行操作前先根据这个全局唯一ID是否存在,来判断这个操作是否已经执行。如果不存在则把全局ID,存储到存储系统中,比如redis,并设置有效期。如果存在则表示该方法已经执行。

http://chatgpt.dhexx.cn/article/8GaKsjqL.shtml

相关文章

⾯板数据分析、空间计量、空间杜宾模型学习资料

数据说明 • 该资源包含⾯板数据分析、空间计量、空间杜宾模型的软件安装教程、演示数 据、代码说明以及Stata内do⽂件

杜宾模型错误请教

本人在实践杜宾模型,进行LR检验时,stata14.0出现如下错误: 请问有解决方法吗?网上有人说空间矩阵维数不匹配,检查了情况是匹配的,想请教一下各位大佬

空间杜宾模型-多种权重矩阵制作、空间相关性检验、SDM、SEM、SAR模型的命令、相关检验及其结果分析

一、数据介绍 数据名称:【stata代码】空间杜宾模型相关检验及结果分析 数据说明:包含全面的空间计量步骤——多种权重矩阵制作、空间相关性检验、SDM、SEM、SAR模型的命令、相关检验及其结果分析、中国南海九段线的中国地图制作,读者可以完…

Stata做空间杜宾模型、莫兰指数等操作

以下内容完全由本人在实际操作中搜集整理总结得到,很细致的介绍:从如何在stata中导入数据,怎么定义面板数据,再到如何做局部和全局空间相关性检验(莫兰指数)和空间杜宾模型等。 1、导入面板数据 在excel中…

一文读懂空间杜宾

目录 一.基本知识及操作 1.基础知识 1.1空间矩阵(w):用来表示平面数据之间的空间距离权重的,是特别重要的参数,可以是经济,空间,其他等区域上的差异距离。(我们是做空间的关系的,…

spatialreg | 空间滞后模型(SLR)、空间误差模型(SEM)和空间杜宾模型(SDM)的简单形式的R语言实现...

关于空间计量模型,小编是通过阅读勒沙杰(James LeSage)和佩斯(R.Kelley Pace)合著的《空间计量经济学导论》(Introduction of Spatial Econometrics)入门的,但是当时着重的是理解这些…

spatialreg | 空间滞后模型、空间误差模型和空间杜宾模型简单形式的R语言实现...

旧文重发,原文链接:https://mp.weixin.qq.com/s/pHRS9BfkCMe1uQOSkHmqAw 关于空间计量模型,小编是通过阅读勒沙杰(James LeSage)和佩斯(R.Kelley Pace)合著的《空间计量经济学导论》&#xff08…

空间杜宾模型SPDM

T个周期,N个地区,K个解释变量。 1.基准面板回归模型 其中,x1为核心的解释变量,其余为控制变量。 2.空间面板滞后模型SPLM 其中,W为n*n阶距离矩阵,为空间滞后系数。揭示了邻近地区Y值对本地区Y值的影响效应。 3.空间…

空间计量经济学(3)---空间杜宾模型与广义嵌套空间模型

一、空间杜宾模型 1.空间杜宾模型形式 空间杜宾模型(SDM)是空间滞后模型和空间误差项模型的组合扩展形式,可通过对空间滞后模型和空间误差模型增加相应的约束条件设立。空间杜宾模型(SDM)是一个通过加入空间滞后变量而增强的SAR模型(空间滞后模型)。即: 式中𝑾𝟏…

stata实现经济生态的空间杜宾模型

文章目录 摘要一. Stata 实现空间杜宾模型过程1.空间权重矩阵的生成1.1 获取地图json数据文件1.2 获取市级行政单元Shapefile1.3 Arcgis创建空间权重矩阵1.4 创建经济距离权重矩阵 2.莫兰指数分析2.1 收集整理需要被解释分析的变量2.2 莫兰指数的计算 3. 空间杜宾模型简单实现4…

学习中遇到的知识点

A 1.anchor-based: 优点:加入了先验知识,模型训练相对稳定;密集的anchor box可有效提高召回率,对于小目标检测来说提升非常明显。 缺点:对于多类别目标检测,超参数相对难设计;冗余b…

NLP原理和应用入门:paddle(梯度裁剪、ONNX协议、动态图转静态图、推理部署)

目录 一、梯度裁剪 1.1设定范围值裁剪 1. 全部参数裁剪(默认) 2. 部分参数裁剪 1.2 通过L2范数裁剪 1.3通过全局L2范数裁剪 二. 模型导出ONNX协议 三、动态图转静态图 3.1两种图定义 3.2 什么场景下需要动态图转静态图 3.3为什么动态图模式越来…

论文知识点(补)

时间戳: 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 (1)Positive pairs:正样本对 (2)negative pair:负样本对 (1)假阳性:把不具备你…

Knowledge Distillation with the Reused Teacher Classifier论文阅读+代码解析

论文地址点这里 一. 介绍 给定一个具有大量参数的强大教师模型,知识蒸馏(KD)的目标是帮助另一个参数化较少的学生模型获得与较大的教师模型相似的泛化能力。实现这一目标的一种直接方法是在给定相同输入的情况下对齐它们的logits或类预测。由于KD技术概念简单&…

不仅搞定“梯度消失”,还让CNN更具泛化性:港科大开源深度神经网络训练新方法

原文链接:不仅搞定“梯度消失”,还让CNN更具泛化性:港科大开源深度神经网络训练新方法 paper: https://arxiv.org/abs/2003.10739 code: https://github.com/d-li14/DHM 该文是港科大李铎、陈启峰提出的一种优化模型训练、提升模型泛化性能与…

Rocket Launching: A Universal and Efficient Framework for Training Well-performing Light Net论文阅读

目录 摘要 引言 相关工作 方法 框架和损失函数 方法特色 实验 不同的共享结构 CIFAR-10 rocket和AT的中间层注意图的可视化 结论 摘要 提出了用好网络帮助小网络训练的新的统一框架 这个框架中,好网络全程都在帮助小网络学习 分析了不同的loss的效果 用叫…

面试之算法知识点总结

1.如何防止过拟合 加样本,加正则化惩罚项,加dropout,减小网络规模,early stopping 2.cacade r-cnn https://zhuanlan.zhihu.com/p/42553957 3.朴素贝叶斯的朴素 之所以叫朴素,就是因为属性条件独立的假设&#xf…

【论文笔记_在线蒸馏、GAN】Online Multi-Granularity Distillation for GAN Compression

2021年。 摘要 生成性对抗网络(GAN)在生成优秀图像方面取得了巨大的成功,但是,由于计算成本高,内存使用量大,在资源有限的设备上部署GAN非常困难。尽管最近压缩GAN的努力取得了显著的成果,但它…

BERT知识点总结

文章目录 为什么NLP网络中经常使用Adam优化器以及存在的问题NLP语言模型的特点Adam优化器的特点问题解决办法 BERT的基本原理BERT为什么要取消NSP任务为什么BERT比ELMo效果好?ELMo和BERT的区别是什么?为什么BERT比ELMo效果好ELMo和BERT的区别是什么 BERT…