接口幂等性设计(5 大方案罗列)

结合案例、列举场景的接口幂等性设计方案。

方案 1. 状态机

业务场景,数据审核成功后进行短信通知,或者是订单状态变成已支付后,短信通知用户订单生成的详细信息,等等和状态有关的操作。
假设 status:0(待审核)、1(已审核)、2(已退回)。

批量审核场景幂等性代码设计
在这里插入图片描述
shtz 方法 中的 sql 语句如下:update tab_dzzzhz set status = 1 where (status = 0 or status = 2) and id = #{id}

生效原理:用的是Mysql,Mysql 中的 update 原理,先是对查询条件中命中的数据进行上锁,然后接着修改这条数据。因此当有多个请求打过来,对指定 id、status 的这条数据的更新时,其实是一个串行化操作。第一个请求更新好数据后,数据的 status 变为了 1,第二个请求过来,发现没有符合条件的数据要更新了,直接 return 0(影响的行数为 0)。此时代码中就可以认为此次更新操作是多余的。就避免了重复短信通知的问题

方案 2. redis 分布式锁

这个没啥好说的,就是利用 lua 脚本,保证对应 查询、更新操作 的业务逻辑是原子性的。至于 lua 脚本锁的 key 根据各位的业务逻辑来。
分布式会议室(幂等性校验、同一用户只能报名一次)

方案2与 方案 1 的区别在于,其实就是一个利用 mysql 的行锁、表锁机制实现的,一个是利用 redis 的 lua 脚本实现的。

方案 3.加唯一索引

之前有个业务场景就是必须保证生成,同一个证照编号的数据只能存在一条,而这个数据是掉第三方系统生成的,第三方系统可能存在 bug,同时发俩条一样证照编号的数据过来。此时我们的Mysql 表中由于,对证照编号加了唯一索引,因此在入库的时候,就能进行异常检测了。避免出现重复数据的问题。唯一索引可以是一个字段唯一、也可以是多个字段组合唯一
在这里插入图片描述

方案 4.利用Mysql 乐观锁、悲观锁

请挪步:一个小小的乐观锁、悲观锁也能扯这么多

方案 5.建立防重表

进行查询、更新操作之前。第一个请求先把数据插入防重表。后面的并发请求过来插入数据到防重表数据报错。捕获异常直接返回成功。

防重表设计:id+唯一索引。唯一索引可以是多个字段比如:name、code等组合起来的唯一标识,例如:zzh_01。而 mysql 中的 insert 操作,会对 (id+唯一索引) 附近的数据加上间隙锁。多个(id+唯一索引) 的数据并发进行入库时,变成了串行化操作。从而起到了防重的作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/347271.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于遗传优化算法的风力机位置布局matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于遗传优化算法的风力机位置布局matlab仿真,风力机位置布局优化是风能转换系统设计中的一个重要环节,旨在最大化风场的整体发电效率。仿…

创建 MFC DLL-使用关键字_declspec(dllexport)

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将于及时删除 从MFC DLL中导出函数的另一种方法是在定义函数时使用关键字_declspec(dllexport)。这种情况下,不需要DEF文件。 导出函数的形式为: declspec(dll…

《书生·浦语大模型实战营》第4课 学习笔记:XTuner 微调 LLM:1.8B、多模态、Agent

文章大纲 1. 大模型微调简介2 快速上手2.1 环境安装2.2 前期准备2.2.1 数据集准备2.2.2 模型准备2.2.3 配置文件选择2.2.4 小结 2.3 配置文件修改2.4 模型训练2.4.1 常规训练2.4.2 使用 deepspeed 来加速训练2.4.3 训练结果2.4.4 小结 2.5 模型转换、整合、测试及部署2.5.1 模型…

[大模型]LLaMA3-8B-Instruct WebDemo 部署

环境准备 在 autodl 平台中租赁一个 3090 等 24G 显存的显卡机器,如下图所示镜像选择 PyTorch-->2.1.0-->3.10(ubuntu20.04)-->12.1 接下来打开刚刚租用服务器的 JupyterLab,并且打开其中的终端开始环境配置、模型下载和运行 demo。 pip 换源…

FreeRTOS学习笔记-基于stm32(14)内存管理

一、FreeRTOS 内存管理简介 FreeRTOS有两种方法来创建任务,队列,信号量等,一种动态一种静态。静态方法需要手动定义任务堆栈。使用动态内存管理的时候 FreeRTOS 内核在创建任务、队列、信号量的时候会动态的申请 RAM。 我们在移植FreeRTOS时可…

6.结构体

目录 一、普通结构体(struct)1.1 说明1.2 举例1)结构体定义及访问2)结构体初化的简单写法3)结构体更新语法 二、元组结构体(tuple struct)2.1 概念2.2 示例 三、类单元结构体(unit-l…

安全智能预警软件有人试图窃取会立即发出高分贝警报已解锁VIP功能

一款手机安全智能预警软件,无论是网吧还是餐馆小聚,您的手机都能得到贴心的守护,一旦有人试图窃取,应用会立即发出高分贝警报,确保您在公交、地铁、商场等拥挤环境中依然能牢牢掌控手机。(解锁专业版&#…

【调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新】

调试笔记-系列文章目录 调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新 文章目录 调试笔记-系列文章目录调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新 前言一、调试环境操作系统:Windows 10 专业版调试环境调试目标 二、调…

Go使用https

一、服务端 1. 生成私钥和证书 安装OpenSSL windows安装OpenSSL生成CA证书创建证书 以上两个步骤,参考:Go http2 和 h2c 2. 代码 package mainimport ("log""net/http""time""golang.org/x/net/http2" )co…

大语言模型QA

Q:关于 Yi-9B 通过 input/output cosine 来分析模型,可能文档里没有把前提说明白。该指标确实存在你们提到的不同模型大小不可比的问题。所以我们比较的是同一个模型在不同训练阶段,以及 layer 深度相同的dense models 之间的比较。除了发现yi-6B/34B 随着训练 tokens 的增加…

Qt | openSSL将TCP数据进行不对称(RSA)加密传输-windows平台实操(可行)

01、windows平台工具准备 QtQt5.14.2openSSL下载(选择适合自己的版本即可)https://slproweb.com/products/Win32OpenSSL.htmlTCP调试助手调试助手02、简介 首先简单介绍一下openssl。接着描述如何在windo

D435相机结合Yolo V8识别出目标物体,并转点云出抓取位姿。

最近项目上需要完成整个识别、定位、到最后的抓取流程。 分享一下,通过使用D435相机并结合Yolo V8识别出目标物体后,抠取出目标物体部分的有效深度图,最后将前景物体部分的RGB D435相机结合Yolo V8识别出目标物体,并转点云出抓取位…

问题:设开环系统的频率特性为则其相频特性穿越-180°线时对应的频率为()。 #学习方法#微信

问题:设开环系统的频率特性为则其相频特性穿越-180线时对应的频率为()。 ? A、10rad1s B、3rad/s C、lradIs D、√3rad/s 参考答案如图所示

python使用wkhtmltopdf将html字符串保存pdf,解决出现方框的问题

出现的问题&#xff1a; 解决办法&#xff1a; <html> <head><meta charset"UTF-8"/> </head> <style> * {font-family: Arial,SimSun !important; } </style> </html>在html字符串前面加上上面代码&#xff0c;意思是设…

结构体<C语言>

导言 结构体是C语言中的一种自定义类型&#xff0c;它的值&#xff08;成员变量&#xff09;可以是多个&#xff0c;且这些值可以为不同类型&#xff0c;这也是和数组的主要区别&#xff0c;下面将介绍它的一些基本用法&#xff0c;包括&#xff1a;结构体的创建、结构体变量的…

Pyramid Vision Transformer, PVT(ICCV 2021)原理与代码解读

paper&#xff1a;Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions official implementation&#xff1a;GitHub - whai362/PVT: Official implementation of PVT series 存在的问题 现有的 Vision Transformer (ViT) 主要设计…

一款优秀的下载和共享工具

一、简介 1、它以舒适和快速的方式下载Internet文件&#xff0c;同时支持断点续传和嗅探视频音频的功能。 它具有站点抓取、批量下载队列和计划任务下载等功能&#xff0c;可以接管所有浏览器的下载任务&#xff0c;包括Edge&#xff0c;Firefox和Chrome等主流浏览器。 对于用…

Django DeleteView视图

Django 的 DeleteView 是一个基于类的视图&#xff0c;用于处理对象的删除操作。 1&#xff0c;添加视图函数 Test/app3/views.py from django.shortcuts import render# Create your views here. from .models import Bookfrom django.views.generic import ListView class B…

Windows电脑清理C盘内存空间

ps&#xff1a;过程截图放在篇末 一、%tmp%文件 win R键呼出运行窗口&#xff0c;输入 %tmp% 自动进入tmp文件夹&#xff0c;ctrl A全选删除 遇到权限不足&#xff0c;正在运行&#xff0c;丢失的文件直接跳过即可 二、AppData文件夹 1、pipcache 在下列路径下面&…

Python爬取城市空气质量数据

Python爬取城市空气质量数据 一、思路分析1、寻找数据接口2、发送请求3、解析数据4、保存数据二、完整代码一、思路分析 目标数据所在的网站是天气后报网站,网址为:www.tianqihoubao.com,需要采集武汉市近十年每天的空气质量数据。先看一下爬取后的数据情况: 1、寻找数据…