前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学会如何保证接口幂等性,跟我一起拷打面试官

学会如何保证接口幂等性,跟我一起拷打面试官

作者头像
程序员牛肉
发布2024-09-26 12:57:00
660
发布2024-09-26 12:57:00
举报
文章被收录于专栏:小牛肉带你学Java

大家好,我是程序员牛肉。

相信很多从事Java后端的开发者在初期完成项目接口的时候,一定会忽略掉”幂等性“这个要求。

而”幂等性“在八股中又不是热门内容,因此面试官一般向面试者提问这方面内容的时候,几乎是一问一个不吱声。

今天我就来简单的介绍一下什么是幂等性。

part1

「什么是幂等性」

”幂等性“可以简单的理解为:对于同一操作,不论执行多少次,产生的影响都是相同的。

我来举一个现实中的例子:

当我们在用户网站进行注册的时候,当我们因为系统卡顿而多次点击注册按钮的时候,后端肯定不会在数据库生成多个一样的账号密码,而是只有一个账号密码

在这个场景中去解释幂等性:幂等性就是多次重复调用操作(因为卡顿多次点击注册),对结果只影响一次(最终只注册一个账号密码)

part2

「未保证幂等性引发的问题」

因为没有保证幂等性而引发的问题很常见,比如:

  • 网络波动引起的重复请求
  • 使用了失效或者超时重试机制导致接口被重复调用
  • 消息队列中间件的默认重试机制
  • 页面重复刷新
  • 用户重复点击提交按钮
  • 使用浏览器后退按钮重复之前的操作,导致重复提交数据。

未保证幂等性的订单接口:

保证了幂等性的订单接口:

part3

「如何保证接口幂等性」

1.token机制

当用户发起请求之前,后端会生成一个键值对存储在redis中,键是当前请求用户的ip+参数,值是token。

当用户向后端发送请求的时候,需要携带token,我们在redis中判断是否存在token,如果存在就删除token并且执行操作,如果不存在token就说明当前已经有相同的请求被执行过。

2.分布式锁

我们把传入的参数和用户id作为键值对来构造出一个键值对。每一次进来都要尝试构造键值对,如果构造成功,就执行业务逻辑代码,如果没有执行成功,就拒绝这次请求

第一次构造成功:

第二次构造失败:

3.MySQL去重表

就是在存入MySQL之前,先要检查一下是否有相同数据,如果有相同数据就拒绝插入。

当然了,MySQL去重表技术也是存在缺陷的:不是所有的业务都会使用到MySQL的。

总之,幂等性在分布式系统和接口设计中扮演着至关重要的角色。通过确保相同操作的重复执行不会产生额外的影响,幂等性能够提升系统的可靠性、稳定性和安全性。然而,实现幂等性并非易事,面临诸多挑战,包括并发冲突、性能开销、安全风险等问题。

相信通过我的介绍,你已经大致了解什么是“幂等性”并且如何保证一个接口的幂等性。关注我,带你了解更多计算机干货。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员牛肉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档