目录

什么是幂等?

读和写请求都需要做幂等吗?

系统的哪部分需要做幂等?

数据访问层的增删改查都需要做幂等处理吗?

数据库的修改做幂等(age++的情况展开讨论)

分布式系统的ID如何生成?


什么是幂等?

系统中的重复操作,不管执行多少次,都产生一样的效果,或返回一样的结果。

读和写请求都需要做幂等吗?

读请求不需要做幂等(因为读请求不会对数据发生改变)。

写请求需要做幂等(对数据发生改变了就根据需要做幂等)。

系统的哪部分需要做幂等?

因为数据访问层和数据库直接联系,涉及到数据的增删改查,所以需要在数据访问层做幂等处理。

数据访问层的增删改查都需要做幂等处理吗?

数据访问层的增删改查:

增:主键分业务主键(唯一)、自增主键(最好不用,自增主键不好做幂等)。如果是唯一主键,那么就是天然幂等(重复插入会报错)。

读:不会改变数据,所以不需要做幂等处理。

改:set age=18或set age++,age++不能保证幂等(主要讨论这种情况)。

删:where uid=58或者where uid in bottom 10。删除最后10条,不幂等(不推荐这种做法)。推荐根据id删除,这样不管删除多少次结果都是一样的。

数据库的修改做幂等(age++的情况展开讨论)

这种情况,一般都是先查询,再进行修改,例如:update db set age++ where age=18 (伪代码)

或者将相对值改为绝对值的修改:set age=19

修改做幂等通常伴随着分布式事务的问题:

例如银行转账,A给B转账500元,这种就需要做幂等处理。(这里涉及到分布式事务,以后再写一篇文章专门介绍分布式事务)

通常的转账流程:

1.A发起转账500的请求,生成流水号。

2.A账户冻结500元,该单号状态设置为正在转账的状态。

3.B帐号增加500元,该单号状态设置为转账成功状态。

数据库的幂等也可以用分布式锁来进行处理。

分布式系统的ID如何生成?

这里推荐一个Twitter用的snowflake来生成分布式系统的ID。

什么是服务的幂等?为什么要实现幂等?相关推荐

  1. 什么是幂等,什么情况下需要幂等,如何实现幂等

    在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景: 一个订单创建接口,第一次调用超时了,然后调用方重试了一次 在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次 当这笔订 ...

  2. 快速幂,矩阵乘法,矩阵快速幂

    快速幂利用二进制 复杂度 log级 #include <cstdio> #include <iostream> #include <string> #include ...

  3. 快速幂算法(矩阵快速幂还不是很会。。日后会更新)

    PS:转载,自己写的不如人家,怕误导.转载地址:http://www.cnblogs.com/CXCXCXC/p/4641812.html 首先,快速幂的目的就是做到快速求幂,假设我们要求a^b,按照 ...

  4. python求次幂_python如何求次幂?

    python中可以使用math模块中的pow()方法求次幂.pow() 方法返回xy(x的y次方)的值. math 模块 pow() 方法的语法:import math math.pow( x, y ...

  5. 判断 2 的幂次方、3 的幂次方、4 的幂次方

    1. 2 的幂次方 给你一个整数 n,请你判断该整数是否是 2 的幂次方.如果是,返回 true :否则,返回 false . 如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂 ...

  6. matlab 画幂律 视频,画出——幂律图

    % 2015年6月30日13时14分10秒--幂律图 clear tic %察看当前目录有多个log文件,将当前文件信息取到files 数据结构中. filesShiJian=dir( '*.log' ...

  7. 逆幂律模型_逆幂律曲线的基本架构永远不会改变

    鲁迪·拉克(Rudy Rucker):数学家,计算机科学家,赛博朋客(cyberpank)先驱,科幻小说家,著有<穿梭于有序与无序的杂乱间>(Surfing the Gnarl). 我们的 ...

  8. C语言编程判断是否为2的幂,C语言判断一个数是否是2的幂次方或4的幂次方

    快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0: 因此问题可以转化为判断1后面是否跟了n个 ...

  9. 矩阵快速幂详解--用矩阵幂解决的多种问题

    最经典的题目 以及洛谷一大堆相似题斐波那契升级版,广义斐波那契等等,都是相关的题目.一般而言我们求解斐波那契无非是不断地向前迭代,但是这样的效率实在是太低了.对于nnn的规模如此之大的题目应该如何求解 ...

  10. 快速幂算法(理解快速幂只需两道题)

    重点看代码注释 题目 2088: [蓝桥杯]快速幂 时间限制: 1Sec 内存限制: 128MB 题目描述 给定A, B, P,求(A^B) mod P. 输入 输入共一行. 第一行有三个数,N, M ...

最新文章

  1. 网站排名和权重骤降的原因是什么?又该如何处理?
  2. boost::hana::zip用法的测试程序
  3. 安装deepin linux
  4. 【转】PHP的Trait 特性
  5. sid更新 续订sas软件_顶级统计软件sas9.4 64位sid 有效期至2017年6月底
  6. VirtualBox 上安装Debian 后分辨率设置
  7. CloudIDE插件开发实战:教你如何调试代码
  8. hbase动态更改行键设计_谈笑间学会Hbase Rowkey设计
  9. vs 2015 密钥
  10. hp1015驱动64位_惠普1015打印机驱动下载
  11. 十大网站压力测试软件-- WEB压力测试工具介绍
  12. 小米有品多个商品主图、细节图怎样快速分类保存
  13. SkyWalking 吴晟:好的开源项目,要能解决真实且有共性的问题
  14. java操作跨页的word cell_Java 创建Word表格/嵌套表格、添加/复制表格行或列、设置表格跨页断行...
  15. c语言中分不分大小写,C语言高级语言程序设计(一)-第四章 程序设计方法-模块化与算法设计.ppt...
  16. win10电脑连接投影仪怎样设置,有相关教程吗
  17. 隐私计算加密技术基础系列(上)
  18. 算法训练 旅行家的预算
  19. Android 高德地图选点,定位;实现地图选点上车功能;
  20. matlab 波士顿矩阵,怎么报考Qbus选课-必修课

热门文章

  1. weblogic 故障转移
  2. 关于日志的常用配置(log4j和logback)
  3. nexus 安装_Jenkins Pipelines将制品发布到Nexus存储库
  4. 银河麒麟安装远程桌面
  5. 网速、宽带速率运营商说法与用户说法转换
  6. ue4 classuobject没有成员beginplay_UE4中蓝图函数的泛型
  7. html文件用safari打开方式,如何使用openURL()读取在safari中打开的html文件 - c#代码 - 源码查...
  8. 东八区转为0时区_踩坑记 | Flink 天级别窗口中存在的时区问题
  9. python 判断类型_青少年之Python编程课程安排lt;第一季gt;
  10. conda 指定版本python_conda Pyhon版本切换