幂等是什么?

幂等是什么?,第1张

这里有这么一段:

GET与POST

你可能想了解GET和POST之间有什么区别,并想知道什么时候使用它们。从理论上讲,如果请求是幂等的就可以使用GET,所谓幂等是指多个请求返回相同的结果。实际上,相应的服务器方法可能会以某种方式修改状态,所以一般情况下这是不成立的。这只是一种标准。更实际的区别在于净荷的大小,在许多情况下,浏览器和服务器会限制URL的长度URL用于向服务器发送数据。一般来讲,可以使用GET从服务器获取数据;换句话说,要避免使用GET调用改变服务器上的状态。

一般地,当改变服务器上的状态时应当使用POST方法。不同于GET,需要设置XML- HttpRequest对象的Content-Type首部,如下所示:

xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")

与GET不同,POST不会限制发送给服务器的净荷的大小,而且POST请求不能保证是幂等的。

你做的大多数请求可能都是GET请求,不过,如果需要,也完全可以使用POST。

最近遇到一些问题,表单重复提交,导致插入重复数据到数据库,这里查询一些通用的方案,自己都实践一下,以后好回顾。

实践代码项目 Github: https://github.com/h-dj/Spring-Learning/tree/master/repeat-submit

幂等 (idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。

在编程中一个幂等 *** 作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。--- 百科

简单理解:就是针对一个 *** 作,不管做多少次,产生的效果都是一样的。

举例:

对于业务中需要考虑幂等性的地方一般都是接口的重复请求,重复请求是指同一个请求因为某些原因被多次提交。导致这个情况会有以下几种场景:

前端方面:

后台方面:

注意:

以下准备使用加入购物车为例,实现各个方案

分布式锁可以使用 Redis 和 Zookeeper ,更多关于 Redis 和 Zookeeper 的使用 请自行查阅资料。以下使用 Redis 来实现分布式锁

以上是较为常见通用的幂等方案,但实际业务可能比较个性化,需要跟业务结合进行考虑,采用合适的方法或结合使用,例如:

本文作者:JiaJianHuang

本文链接:https://www.cnblogs.com/JianJianHuang/p/15702912.html

数据的对象和范围

你要考虑你的幂等的全局性:空间全局性和时间全局性。

空间全局性:比如是交易流水幂等还是用户ID幂等。是某种类型交易流水幂等,还是某个人|机构|渠道的交易流水幂等

时间全局性:是幂等几秒,还是几分钟,还是永远。

不同的要求,可以有不一样的解决方案、难度和成本。

幂等方案

对时间全局性要求高的,可能就必须选择DB这种持久化方案比较可靠,但是性能不够好啊(然后就要考虑loadmemory,以及数据同步的问题,就一步还要考虑实时性要求了)

在空间的要求中,根据不同的幂等范围,可以考虑分布式数据库(分布式集群全局流水号幂等)。还是某种少量数据幂等(可能只需要单台,做好主备)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/sjk/6617958.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-25
下一篇 2023-03-25

发表评论

登录后才能评论

评论列表(0条)

保存