[每日短篇] 7 - 幂等

幂等是一个在很多领域中都有的概念,我们最早接触的领域应该是数学,数学上的幂等概念比较复杂,不严谨地说可以理解为:

  1. 对于二元运算 O,如果集合 S 的任意元素 s 都有 s O s = s,那么 S 的二元运算符 O 是幂等的。容易理解的例子有逻辑与、逻辑或、交集、并集运算等,它们都是任意一个元素针对自身操作结果都为自身。
  2. 对于一元运算,如果集合 S 的任意元素 s 都有 f(f(s)) = f(s),那么 f 就是幂等的,容易理解的例子有绝对值符号 |x|、高斯符号 [x] 等。

在程序中幂等的概念略有不同但是也能看到相似的地方,程序的幂等可以简单定义为函数 f 被重复调用时,系统状态跟单次调用状态一致,则 f 是幂等的。换句话说,函数 f 一次调用和多次调用产生的副作用是相同的。

在程序设计中,幂等性是简化系统设计提高系统可用性的重要手段。一些简单的 getter / setter 操作理应是幂等的,如果不是幂等的应该把作者拖出去示众。但是另外的方法要做成幂等就需要一定的专门设计了。要实现幂等常见的思路主要是:

  1. 操作本身真的是幂等的,这适合于 get 和 set 类的操作;
  2. 第2次及之后的操作失败,比如用乐观锁、唯一索引、MySQL 的 insert ignore 等;
  3. 每次执行覆盖前次结果,比如 Oracle 的 merge into、MySQL 的 replace into / on duplicate key update 等。 当然,个人强烈不建议觉得读这篇文章收获很多的读者使用数据库特性做幂等,因为其逻辑涉及到主键、唯一索引等,恐怕不太容易认识到其实驾驭不了这些特性。

转载于:https://my.oschina.net/u/1762727/blog/2873137

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值