幂等的理解和处理

什么是幂等

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

在编程中,幂等 的理解就是,在数据不变的情况下,一个操作,无论执行多少次,结果都是一样的

常用场景

  • 前端数据重复提交
  • 订单支付请求
  • 无论是网络超时?系统bug?还是其他原因,都只应该扣一次钱
  • push推送消息
  • 推送多条同样的消息,用户会疯掉的
  • 发短信给用户
  • 用户下单

等等,很多熟悉的应用场景,都需要考虑幂等性,而导致数据不一致或者出问题的情况很多,

例如:重复点击? 重复提交?网络重发?或者nginx重发导致的数据重复提交等等

幂等技术方案

查询操作
查询一次和查询多次,在数据不变的情况下,查询结果是一样的。select是天然的幂等操作

删除操作
删除操作也是幂等的,删除一次和多次删除都是把数据删除。(注意可能返回结果不一样,删除的数据不存在,返回0,删除的数据多条,返回结果多个)

唯一索引
数据库创建唯一索引或者组合唯一索引,都可以避免脏数据,保证幂等,但是注意处理异常

token机制
之前在做接口开发的时候,思考过几个问题:

  • 如何保证请求接口响应结果的唯一性
  • 如何防止恶意请求或者攻击
  • 分布式环境下,如何保证请求接口的响应结果

当时考虑的结果是用token + redis来实现的,流程如下:

  • 请求之前,先问服务器要一个token,服务器缓存token到redis,加上超时时间
  • 请求的时候,带着token
  • 服务器从redis获取token校验,通过后,处理,响应,删除token,未通过校验,则提示token无效

注意:

  • token在redis的超时时间合理控制,防止恶意请求
  • 服务器校验token的时候,采用redis.delete操作,直接使用get+delete 容易存在并发问题
  • token在一定程度上可以限流

总结

在接口开发,特别是和银行支付相关的项目中,幂等是首要考虑的问题,也是在面试中文的比较多的一个问题点,因此理解什么是幂等,如何保证幂等是很重要的。


版权声明:本文为CSDN博主「xiaoxiaoyunlu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/afsvsv/article/details/90767910

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
幂等性是指对同一操作的多次执行所产生的结果与一次执行的结果相同。在计算机科学中,幂等性是一种重要的概念,它可以确保系统在面对重复请求时能够保持一致性和可靠性。幂等性在许多领域都有应用,包括分布式系统、网络通信和数据库操作等。 鲁棒性是指系统在面对异常情况或者不符合预期的输入时,仍然能够保持稳定性和正确性的能力。鲁棒性是许多学科的核心问题,包括生物学、药学、社会科学、经济学、生态学和工程学等。在生物学和药学中,鲁棒性可以帮助我们理解为什么一些基因突变会引发疾病,而另一些却不能。在社会科学和经济学中,鲁棒性关系到人类社会和组织在面对各种变化和挑战时的稳定性。在生态学和环境科学中,鲁棒性是预测人类活动对生态系统影响的重要问题。在工程学中,鲁棒性是设计可靠系统的最终目标,使其在面对组件故障时仍能正常运行。 引用\[1\]和\[2\]提供了关于鲁棒性在不同学科中的重要性和应用。引用\[3\]则提到了在编程中保证鲁棒性的一种常见做法,即进行判空和有效性检查,并将异常传导到业务层进行处理。 综上所述,幂等性和鲁棒性都是计算机科学中重要的概念。幂等性确保系统在面对重复请求时能够保持一致性和可靠性,而鲁棒性则是系统在面对异常情况时能够保持稳定性和正确性的能力。这两个概念在不同领域都有广泛的应用和重要性。 #### 引用[.reference_title] - *1* [网络鲁棒性](https://blog.csdn.net/LaZiv/article/details/114389348)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [关于鲁棒性的思考](https://blog.csdn.net/qqpopxx/article/details/117569806)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值