幂等的理解和处理

什么是幂等

幂等(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

猜你喜欢

转载自blog.csdn.net/weixin_44679832/article/details/105760753