这是一种操作,每个第n个结果都与第一个结果的值匹配。例如,-1的绝对值是1。 -1的绝对值的绝对值是1。 -1的绝对值的绝对值的绝对值也是1。以此类推。
另请参阅:何时使用递归会非常愚蠢?
对于一个集合来说,幂等操作在应用一次或多次后不会改变其成员。
它可以是像 absolute(x) 这样的一元操作,其中 x 属于正整数集合。这里 absolute(absolute(x)) = x。
它可以是像自身与自身的并集 这样的二元操作,总是返回相同的集合。
祝好!
简而言之,幂等操作是指无论您对其进行多少次操作,该操作都不会产生不同的结果。
例如,根据HTTP规范的定义,GET、HEAD、PUT和DELETE
是幂等操作;但是POST和PATCH
则不是。这就是为什么有时候POST
被替换为PUT
的原因。
我的5c: 在集成和网络中,幂等性非常重要。 以下是几个真实生活的例子: 想象一下,我们将数据传递到目标系统。数据由一系列消息组成。 1. 如果序列在通道中混合会发生什么?(就像网络包一样 :))。如果目标系统是幂等的,结果不会有所不同。如果目标系统依赖于序列中的正确顺序,我们必须在目标站点上实现重新排序器,以恢复正确的顺序。 2. 如果存在消息副本会发生什么?如果目标系统的通道没有及时确认,源系统(或通道本身)通常会发送另一个消息副本。结果可能会在目标系统中产生重复的消息。 如果目标系统是幂等的,它会处理好这些问题,结果不会有所不同。 如果目标系统不是幂等的,我们必须在通道的目标系统端实现去重器。
f(f(x)) = f(x)
,那么它被称为幂等函数。
因此,如果我们有一个函数 absolute(x)
,它返回整数 x
的正数对应值;那么以下条件必须成立:absolute(absolute(x)) = absolute(x)
absolute(-100) = 100
AND
absolute(absolute(-100)) = absolute(100) = 100
=> absolute(absolute(x)) = absolute(x)
{1,2,4}
的集合,并尝试执行add(2)
操作,那么结果即集合的内容将不会改变。无论你重复这个操作多少次,结果始终都是相同的,即{1,2,4}
。然而,当你添加一个集合中不存在的元素,比如执行add(3)
操作时,集合将变为(不考虑顺序){1,2,4,3}
。但是,无论你再次重复这个操作多少次(甚至100次),结果(即集合)仍将包含{1,2,4,3}
。对于列表来说,情况并非如此,因为它可以包含重复的元素。每次向列表中添加元素时,它都会被添加进去。PUT
旨在替换服务器状态。因此,如果您在网站上存储了一个地址,PUT请求应该在其请求中包含整个地址。此外,它应该替换服务器上的数据(如果数据尚不存在,则创建)。因此,首次执行请求和多次执行相同请求后的结果完全相同。
4. 为什么DELETE
必须是幂等的?
删除用于从服务器上删除资源。因此,如果您删除自己的地址,同一地址不能再次被删除(它不存在,并且不会删除其他内容)。因此,首次执行和多次执行相同请求后的结果完全相同。这个视频非常详细地解释了这些概念:https://www.youtube.com/watch?v=R7s2FVN4c9Q
对于工作流管理器(如Apache Airflow),如果您的管道中的幂等性操作失败,则系统可以自动重试任务,而不会影响系统。即使日志发生变化,这也是好的,因为您可以看到事件。
在这种情况下最重要的是,您的系统可以重试失败的任务,并且不会搞乱管道(例如,在每次重试中将相同的数据附加到表中)。