分布式系统实现幂等性的方式

2023-11-12

幂等性:接口的幂等性就是同样的数据,在实现方法的多次调用,得到的结果一致。对于查询接口,天然的保持幂等性,但是对于cud来说,如何保持幂等性。

看法:从以下方式来看,要保证幂等性,必须要有一个标识,至始至终的保持不变的标识,只有这样,后来的操作才可以依据这个标识判断是否曾经更改过,从而实现幂等性

方式1:使用乐观锁:

在系统设计的过程中,合理的使用乐观锁,通过version版本条件进行控制,来做乐观锁的判断条件,这样保证更新操作即使在并发的情况下,也不会有太大的问题。(对于不是该版本的数据,修改不成功)

方式2:添加去重表+状态

在针对该业务表的不同状态的操作时,可以建立去重表进行跟踪记录,根据业务表主键查询是否有去重表记录,并根据状态对业务表进行不同的业务操作。

通过重表记录业务表的唯一主键,进行cud时,查询是否操作过

方式3:悲观锁

select for update,整个执行过程中锁定该订单对应的记录。注意:这种在DB读大于写的情况下尽量少用,比较耗性能。

4. select + insert

并发不高的后台系统,或者一些任务JOB,为了支持幂等,支持重复执行,简单的处理方法是,先查询下一些关键数据,判断是否已经执行过,在进行业务处理,就可以了。注意:核心高并发流程不要用这种方法。

5.全局唯一ID

如果使用全局唯一ID,就是根据业务的操作和内容生成一个全局ID,在执行操作前先根据这个全局唯一ID是否存在,来判断这个操作是否已经执行。如果不存在则把全局ID,存储到存储系统中,比如数据库、redis等。如果存在则表示该方法已经执行。

6. token机制,防止页面重复提交

业务要求:页面的数据只能被点击提交一次

发生原因:由于重复点击或者网络重发,或者nginx重发等情况会导致数据被重复提交

数据提交前要向服务的申请token,token放到redis或jvm内存,token有效时间

提交后后台校验token,同时删除token,生成新的token返回

token特点:要申请,一次有效性,可以限流

 

参考原文:http://www.sohu.com/a/284541897_100028126

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分布式系统实现幂等性的方式 的相关文章

  • 在html中取消超链接的下划线

    在html的超链接a标签中取消下划线需要用到text decoration a text decoration none
  • AI部署之路

    作者 Oldpan 编辑 汽车人 点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 模型部署 技术交流群 后台回复 模型部署工程 获取基于TensorRT的分类 检测任务的部署源码 好久没更文了
  • WSL2加载独立硬盘和设置固定IP

    最近发现了win10 包括win11 上的神器 Linux子系统 抱着玩一玩的态度安装了 琢磨了几天 逐步把Ubuntu完善起来了 发现完全可以当作WIN Linux双系统使用 还不用重启系统 作为生产力工具绰绰有余 总结了常用的工具软件和
  • CPU、GPU、DPU、TPU、NPU...傻傻分不清楚?实力扫盲——安排

    人工智能的发展离不开算力的支持 算力又是依附于各种硬件设备的 没有了算力设备的加持 就好比炼丹少了丹炉一样 可想而知 人工智能智能也就无用武之地了 以深度学习为主的人工智能方向的发展更是离不开强大的算力支持 随着深度学习的不断发展 各种各样
  • 登录验证,复杂验证

    效果如图
  • 程序员为什么要挤破头也要进大厂?别说是拧螺丝,递扳手我也愿意去!

    大家好 前段时间写了一篇关于程序员的年薪五十万指南 引起了一些共鸣 有些读者私信问我 现在不是大厂竞争很激烈吗 再说大厂的薪水待遇也没有比一些二线公司更好呀 既然如此 那为什么我们还要挤破脑袋进大厂呢 今天就和大家闲聊几句 以下说的仅代表我
  • K8S的卷、临时卷、持久卷、PV、PVC、SC

    博客 cbb777 fun 全平台账号 安妮的心动录 github https github com anneheartrecord 下文中我说的可能对 也可能不对 鉴于笔者水平有限 请君自辨 有问题欢迎大家找我讨论 为什么需要卷 容器中的
  • Maven项目添加mysql-connector-java依赖失败:dependency ‘mysql-connector-java‘not found

    在IDEA中搭建Scala项目 需要将处理过的数据存储到本地mysql数据库中 故需要在Maven的pom xml中添加mysql connector java依赖包 可能是我之前迁移AS项目时更改了在C盘User目录下的 m2 仓库文件
  • 对视觉目标检测的整体认知(基于目标检测综述)

    计算机视觉领域研究的绝大多数问题均存在诸多不确定性因素 因为图像理解是成像的逆过程 成像是从三维向二维投影的过程 在此过程中不仅会丢失深度信息 而且光照 材料特性 朝向 距离等信息都反映成唯一的测量值 即灰度或色彩 而要从这唯一的测量值中恢
  • 双向链表的实现

    定义一个双向链表 定义双向链表 typedef struct LinkNode int data 数据域 LinkNode next 下一个节点 LinkNode last 上一个节点 LinkNode 节点域 LinkList 头结点 初
  • NeRF:神经辐射场论文原理讲解

    一 新视角合成 NeRF是开创了一种全新的视角合成方法 新视角合成任务指的是给定源图像 Source Image 及对应的源姿态 Source Pose 以及目标姿态 Target Pose 渲染生成目标姿态对应的图片 Target 源姿态
  • java: 无法从静态上下文中引用非静态 方法

    Error 11 9 java 无法从静态上下文中引用非静态 方法 printArraylist java util ArrayList
  • 分享一个最好用的剪切板管理软件

    对于每一个离不开电脑的朋友来说 不断的复制 粘贴 剪切 粘贴 是常有的事 而且电脑断电 程序异常退出 因手欠而错关了编辑器等类似噩梦经常发生 之前我找到一个名叫 M8 Free Clipboard 是用起来还算方便 可是免费用户只能保存有限
  • LLc用simplis 如何建模

    简单来说 Simplis 模型的建模方法包括 数据预处理 特征工程 模型设计和调参 首先 需要收集所需的数据 并对数据进行预处理 清洗和标准化 然后 需要进行特征工程 确定哪些特征有助于模型预测 并调整特征以提高模型准确性 接下来 根据数据
  • 【初识Git工具】Git工具的基本介绍

    初识Git工具 Git工具的基本介绍 一 什么是Git 1 1 Git简介 1 2 Git和SVN区别 1 3 常用的Git工具 二 Git的起源 三 Git的优点 四 Git的架构 五 Git的基本概念 5 1 仓库 Repository
  • 电子邮件链接mailto_“ 3个链接”电子邮件的历史记录以及曾经发送的每个链接的存档...

    电子邮件链接mailto by Quincy Larson 昆西 拉尔森 Quincy Larson 3个链接 电子邮件的历史记录以及曾经发送的每个链接的存档 The history of the 3 links email and an
  • 深入理解overlayfs(一):初识

    版权声明 本文为CSDN博主 luckyapple1028 的原创文章 遵循CC 4 0 BY SA版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net luckyapple1028 article d
  • Python-爬虫初体验

    在网易云课堂上看的教学视频 现在来巩固一下知识 先确定自己要爬的网站 以新浪新闻网站为例确 import requests 跟java的导包差不多 python叫导入库 res requests get http news sina com
  • Android 集成 Flutter

    前言 使用 Flutter 已经有一段时间了 开发体验还是非常好的 但是一般我们在正式使用 Flutter 的时候很少会去创建一个纯 Flutter 项目 而是需要在之前的项目中已集成的方式来编写 Flutter 这篇文章将以如何在 And
  • MySQL基础篇-第00章_写在前面

    第00章 写在前面 讲师 尚硅谷 宋红康 江湖人称 康师傅 官网 http www atguigu com 一 MySQL数据库基础篇大纲 MySQL数据库基础篇分为5个篇章 1 数据库概述与MySQL安装篇 第01章 数据库概述 第02章

随机推荐

  • AC-Campus准入控制--Mac

    MAC认证 简介 MAC地址认证是一种基于端口和MAC地址对用户的网络访问权限进行控制的认证方法 它不需要用户安装任何客户端软件 用户名和密码都是用户设备的MAC地址 网络接入设备在首次检测到用户的MAC地址以后 即启动对该用户的认证 用户
  • 图像分类比赛

    cp data wanghd s4 data car data data wanghd whd 使用该命令报错 添加 r 可以实现正常复制 速度非常快 参考博客得到解决 Linux常见错误 cp omitting directory 解决办
  • 输出一个单链表&&反向输出一个单链表(最后有原链接)

    输出一个单链表 假设我们有一个单链表 let list value 1 next value 2 next value 3 next value 4 next null 编写一个可以逐个输出链表元素的函数 printList list 使用
  • arcgis for landsat 8处理

    landsat8的详细数据处理http vdisk weibo com s zrSeGYf9hMRAH http blog sina com cn s blog 764b1e9d01018z6j html http blog sina co
  • osgEarth的Rex引擎原理分析(五十五)Rex引擎如何给shader文件中的uniform变量赋值

    目标 五十四 中的问题128 有几个地方 RexEngine SDK vert glsl中的 uniform sampler2D oe tile elevationTex osgEarthDrivers engine rex RexTerr
  • 全桥逆变电路部分分析

    首先来看单相逆变不间断电源设计电路中的全桥逆变电路部分 它是由两个IR2101驱动和4个MOS管构成的全桥逆变电路 有人会说了 IR2101不是半桥驱动芯片吗 没错 的确是半桥驱动芯片 和IR2104一样的 常被用在三相逆变电路中做三个半桥
  • RCE漏洞详解及绕过总结(全面)

    作者 永不落的梦想 作者主页 传送 座右铭 过去属于死神 未来属于自己 本文专栏 Web漏洞篇 今日鸡汤 只有承担起旅途风雨 最终才能守得住彩虹满天 目录 一 rce漏洞概述 二 常见RCE漏洞函数 1 系统命令执行函数 2 代码执行函数
  • 华为OD机试真题-工作安排【2023Q1】【JAVA、Python、C++】

    题目描述 小明每周上班都会拿到自己的工作清单 工作清单内包含n项工作 每项工作都有对应的耗时时长 单位h 和报酬 工作的总报酬为所有已完成工作的报酬之和 那么请你帮小明安排一下工作 保证小明在指定的工作时间内工作收入最大化 输入描述 输入的
  • 手动安装xapk

    xpak文件实际是一个压缩包 用解压软件可查看其内容 情况1 obb 多见于游戏 apk主包文件很小 用户能安装并启动 要解锁游戏全部内容 则需要下载obb文件 obb文件一般位于 sd卡的根目录下 路径大概是 sdcard Android
  • vue admin-template 添加动态路由

    store getters js const getters sidebar state gt state app sidebar device state gt state app device token state gt state
  • MATLAB实现最大类间方差算法

    Otsu算法 大律法或最大类间方差法 最大类间方差法是由日本学者大津 Nobuyuki Otsu 于1979年提出的 是一种自适应的阈值确定的方法 又叫大津法 简称OTSU 它是按图像的灰度特性 将图像分成背景和目标2部分 背景和目标之间的
  • Pycharm破解方法

    3 破解补丁激活 优点 到期时间为2099年 基本为永久啦 缺点 相对服务器激活麻烦些 但是一共只需要3个步骤 其实并不麻烦 下载 https pan baidu com s 1mcQM8CLUnweY02ahKEr4PQ 并将 Jetbr
  • win7设置右键+T 快捷键 快速新建文本文档

    1 win r 组合键呼出 运行 win就是键盘上和桌面 开始 有相同图标的按键 田 字 2 输入regedit 回车 出现 注册表编辑器 窗口 3 窗口下寻找这个位置 HKEY CLASSES ROOT Local Settings Mu
  • 【pygame学习_5】窗口设计

    1 引言 窗体是游戏的交互界面 一般我们会遇到窗口大小可调 窗口无边框 全屏显示 最小化设计 改名字 换图标等设计需求 屏幕绘制有如下重要函数 2 屏幕模式函数 pygame display set mode print pygame di
  • java解析蓝奏云直连(解析真正文件地址)

    使用htmlunit解析蓝奏云直连 前言 最近有个需求 客户端需要更新软件版本 我一直在用蓝奏云 觉得是个非常不错的网盘 可是如果用户自己打开连接选择下载方式很麻烦 用过蓝奏的朋友都知道 打开外链还要选择普通下载 电信下载 联通下载 很麻烦
  • 多系统UEFI启动项清理,windows、ubuntu,win10盘符隐藏

    文章目录 step1 推荐方法 step2 在window系统中启动cmd窗口 win10 隐藏不必要的盘符 如单机多系统情形 step1 推荐方法 参考 https blog csdn net mtllyb article details
  • sap服务器数据库配置文件,安装和配置 SAP 和数据库

    安装和配置 SAP 和数据库 使用本节中的过程可以执行以下任务 安装 SAP 和数据库 安装 SAP 和可缩放的应用程序服务器 使 SAP 能够在群集中运行 检验 SAP 和数据库安装是否适合于中央实例 检验 SAP 和数据库安装是否适合于
  • R语言排序函数sort(),rank(),order()

    转载地址 http blog sina com cn s blog 6caea8bf0100spe9 html 在R中 和排序相关的函数主要有三个 sort rank order sort x 是对向量x进行排序 返回值排序后的数值向量 r
  • c++智能指针

    C 智能指针详解 本文系转载 原文出处 诚然原博主总结的非常好 我只是加一些自己觉得需要补充的地方 并且在最后给出目前c 11在智能指针这方面的弥补 一 简介 由于 C 语言没有自动内存回收机制 程序员每次 new 出来的内存都要手动 de
  • 分布式系统实现幂等性的方式

    幂等性 接口的幂等性就是同样的数据 在实现方法的多次调用 得到的结果一致 对于查询接口 天然的保持幂等性 但是对于cud来说 如何保持幂等性 看法 从以下方式来看 要保证幂等性 必须要有一个标识 至始至终的保持不变的标识 只有这样 后来的操