计算机应用开发中的幂等(idempotent)是什么?

诸神缄默不语-个人优快云博文目录

幂等(idempotent)是一个数学与计算机科学概念,它指的是一个操作、方法或函数在被多次执行时,其结果与执行一次相同,即多次执行不会产生额外的影响。这个概念在分布式系统、网络通信、API设计等领域非常重要,用于确保系统的稳定性和数据的一致性。

在这里插入图片描述

幂等的定义

  • 数学定义:在数学中,幂等元素是指被自己重复运算(或对于函数是为复合)的结果等于它自己的元素。例如,乘法下仅有两个幂等实数,为0和1。
    f ( x ) = f ( f ( x ) ) f(x)=f(f(x)) f(x)=f(f(x))
    如求绝对值 a b s ( x ) = a b s ( a b s ( x ) ) abs(x)=abs(abs(x)) abs(x)=abs(abs(x)) 就是幂等的
  • 计算机科学定义:在编程中,幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。
    这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。
    一个接口,不管我调多少次,只要参数不变,结果也应该不变。

GET请求一般要求幂等。

幂等的重要性

幂等性在设计分布式系统、网络通信、API设计等方面具有非常重要的应用。例如,在交易支付系统中,下订单是一个常见的业务场景,如果不做幂等性设计,用户多次点击提交按钮可能会导致重复下单,从而造成资源浪费或数据不一致。

幂等的实现方式

幂等性判断

  • 使用防重Token令牌:在客户端发起请求之前,生成一个唯一的防重Token令牌,并将令牌携带在请求中。服务端在接收到请求后,校验令牌,如果令牌已经被使用过,则说明该请求是重复请求,直接返回已处理过的结果。在这里插入图片描述
  • 基于唯一键的幂等:通过为每个操作分配一个唯一的标识符(如订单ID、用户ID等),并在数据库中检查该标识符是否存在,来确保操作的唯一性。

通过理解幂等性的概念、重要性以及实现方式,我们可以更好地设计出稳定、可靠的系统,避免因重复操作导致的数据不一致等问题。

加锁

并发控制,先加锁,然后进行幂等性判断(可以基于状态机、流水表、唯一性索引等等进行重复操作的判断),最后进行数据的更新,将数据进行持久化。
在这里插入图片描述
建议使用Redis实现分布式锁,因为他是非阻塞的高效率的互斥锁。非常适合在幂等控制场景中。

数据库唯一性约束

数据库的唯一性约束都要加好,这是系统的最后一道防线。万一前面的锁失效了,这里也能控制得住不会产生脏数据。

使用数据库唯一主键完成幂等性:需要注意的是,该主键一般来说并不是使用数据库中自增主键,而是使用分布式 ID 充当主键,这样才能能保证在分布式环境下 ID 的全局唯一性。
在这里插入图片描述

版本号+乐观锁

本文撰写过程中参考的其他网络资料

  1. 幂等性是什么?幂等性方案详解(5大步骤原理)
  2. 啥是“幂等”?
  3. 解决幂等问题,只需要记住这个口诀!
  4. 什么是幂等性?
  5. 浅谈幂等
  6. 实现幂等性的 4 种常见方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸神缄默不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值