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

Redis配合唯一序列号实现接口幂等性方案

1.原理

可以在客户端每次请求服务端的时候,客户端请求中携带一个短时间内唯一不重复的序列号来确保其唯一性,这个序列号常见的几种形式有:基于时间戳、用户ID和随机数的组合;基于请求的来源与客户端生成的唯一序列号组合
在这里插入图片描述

2.方案

客户端生成唯一序列号后请求服务端,服务端拿到唯一序列号后组装一个Redis的key,利用setnx命令添加数据,然后根据Redis返回的结果做不同的处理
1)Redis返回的结果是1,表示当前的唯一序列号添加到Redis中成功,那么业务系统可以处理当前的业务逻辑。
在这里插入图片描述
2)Redis返回的结果是0,表示当前的唯一序列号已经在Redis中,此时业务系统认为这个请求已经处理过,就不再处理这个请求,直接给予客户端异常的提示。
在这里插入图片描述
3)唯一序列号添加到Redis中的时候要设置过期时间,这样做的目的是保证在这个时间范围内,如果携带相同唯一序列号的请求调用接口时可以做拦截处理;如果不设置过期时间,可能会致使Redis的内存被打满进而导致Redis宕机。通过这种方式,即使客户端多次发送相同的请求,服务器也只会处理一次,从而保证了接口的幂等性。
在这里插入图片描述

3,结论

方案一: 客户端生成唯一序列号后,服务端根据这个唯一序列号添加到Redis中,如果添加成功则可以执行业务逻辑,如果添加失败则向客户端响应请求执行异常。

方案二: 客户端传递唯一序列号,并且需要使用Redis添加过期时间存储唯一序列号
在这里插入图片描述

相关文章:

  • App/uni-app 离线本地存储方案有哪些?最推荐的是哪种方案?
  • uniapp 安卓 APP 后台持续运行(保活)的尝试办法
  • H_Prj06 8088单板机的串口
  • TDengine 开发指南——无模式写入
  • matlab不同版本对编译器的要求(sfunction 死机)
  • 储能方案设计:鹧鸪云模拟软件优势尽显
  • HTTP 请求协议简单介绍
  • 豆包和deepseek 元宝 百度ai区别是什么
  • VR视频制作有哪些流程?
  • 【JVM】Java虚拟机(一)——内存结构
  • Android 之 kotlin 语言学习笔记四(Android KTX)
  • 数据集-目标检测系列- 口红嘴唇 数据集 lips >> DataBall
  • Shell 编程核心基础:输入输出与运算详解
  • dexcap升级版之DexWild——面向户外环境的灵巧手交互策略:人类和机器人演示协同训练(人类直接带上动捕手套采集数据)
  • [Spring]-AOP
  • Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
  • 《基于Apache Flink的流处理》笔记
  • idea中 maven 本地仓库有jar包,但还是找不到,解决打包失败和无法引用的问题———————————————— 版权声明:本文为博
  • 【idea】分享一个关于Maven依赖管理好用的插件
  • x32dbg SwissArmyKnife 插件导入map文件不生效
  • 做网站用新域名还是老域名/关键词优化报价推荐
  • 有口碑的合肥网站建设/崇左seo
  • 宁波建设网上银行/seow
  • 量化交易网站开发/兰州seo公司
  • 程序员做音乐网站/英文站友情链接去哪里查
  • 怎么在备案号添加网站/如何自己开发一个网站