当前位置: 首页 > news >正文

接口幂等性处理

1.Token 机制:

a首先客户端请求服务端,获取一个 token,每一次请求都获取到一个全新的 token(当然这个 token 会有一个超时时间),将 token 存入 redis 中,然后将 token 返回给客户端。

b客户端将来携带刚刚返回的 token 去请求一个接口。

c服务端收到请求后,分为两种情况:

ⅰ如果 token 在 redis 中,直接删除该 token,然后继续处理业务请求。

ⅱ如果 token 不在 redis 中,说明 token 过期或者当前业务已经执行过了,那么此时就不执行业务逻辑。

d优势:实现简单。

e劣势:多了一个获取 token 的过程。

2.去重表(主要是利用 MySQL 的唯一索引机制来实现的)

a客户端请求服务端,服务端将这次的请求信息(请求地址、参数。。。)存入到一个 MySQL 去重表中,这个去重表要根据这次请求的某个特殊字段建立唯一索引或者主键索引。

b判断是否插入成功:

ⅰ成功:继续完成业务功能。

ⅱ失败:表示业务已经执行过了,这次就不执行业务了。

c存在的问题:MySQL 的容错性会影响业务、高并发环境可能效率低。

3.用 Redis 的 setnx

a客户端请求服务端,服务端将能代表本次请求唯一性的业务字段,通过 setnx 的方式存入 redis,并设置超时时间。

b判断 setnx 是否成功:

ⅰ成功:继续处理业务。

ⅱ失败:表示业务已经执行过了。

4.设置状态字段

○要处理的数据,有一个状态字段。

5.锁机制:

a 乐观锁:数据库中增加版本号字段,每次更新都根据版本号来判断。更新之前先去查询要更新记录的版本号,第二步更新的时候,将版本号也作为查询条件。

ⅰselect version from xxx where id=xxx;

ⅱupdate xxx set xxx=xxx where xx=xx and version=xxx。

b 悲观锁:

ⅰ 假设每一次拿数据都会被修改,所以直接上排他锁就行了。

http://www.lryc.cn/news/8023.html

相关文章:

  • 数字孪生智慧机场:透视数字化时代下的航空运营
  • SpringBoot 文件上传后查看404的问题和解决404后需要访问两次才能查看的问题
  • 定时任务使用总结
  • Jira和Confluence Server版终止支持倒计时365天,企业应对策略汇总
  • GEE学习笔记九十一:栅格影像叠置分析
  • linux系统编程入门
  • JS代码安全防护常见的方式
  • PHP(13)HTTP协议
  • 基于支持向量机 (SVM) 用php实现预测气温
  • MySQL(五)
  • Linux常用命令2
  • 『C/C++养成计划』Visual Studio Code编辑器配置(外观通用型扩展Minmal)
  • 设计模式(适配器模式)
  • 在基于全志D1s的芒果派麻雀上运行国产开源rt-smart系统
  • 【代码随想录训练营】【Day15】第六章|二叉树|层序遍历|226.翻转二叉树|101.对称二叉树
  • 基于圆展开自适应三边测量算法的室内定位
  • 使用中断子系统实现对LED灯的控制
  • 《爆肝整理》保姆级系列教程python接口自动化(十五)--参数关联接口(详解)
  • 【JDK8】MyBatis源码导入Idea
  • 三层交换机DHCP中继
  • C++之RALL机制
  • 回溯算法章末总结
  • 【SpringBoot】为异步任务规划线程池
  • SAP ABAP 输出结果带有空格
  • Opengl ES之踩坑记
  • 设计模式第六讲:责任链模式和迭代器模式详解
  • K8s 架构简介(一)
  • xshell6运行报错:由于找不到mfc110u.dll、MSVCR110.dll无法继续执行代码
  • Baklib知识库管理平台,协助组织提升知识管理水平
  • 一文搞懂core-scheduling核心机制