当前位置: 首页 > news >正文

齐鲁建设网站福建省高速公路建设管理网站

齐鲁建设网站,福建省高速公路建设管理网站,搜索引擎优化应注意什么,曲靖 曲靖网站建设软件(app)开发首先蜗牛和大家从以下几个方面好好剖析一下接口幂等吧。 什么是接口幂等 比较专业的术语#xff1a;其任意多次执行所产生的影响均与第一次执行的影响相同。 也就是多次调用的情况下#xff0c;接口最终得到的结果是一致的。 那么为什么需要幂等呢#xff1f; 那么哪些接…首先蜗牛和大家从以下几个方面好好剖析一下接口幂等吧。 什么是接口幂等 比较专业的术语其任意多次执行所产生的影响均与第一次执行的影响相同。 也就是多次调用的情况下接口最终得到的结果是一致的。 那么为什么需要幂等呢 那么哪些接口需要做幂等呢 接口幂等的实现某种意义上是要消耗系统性能的我们没有必要针对所有业务接口都加上幂等。 既然我们说幂等就是多次调用接口最终得到结果一致那么很显然查询接口肯定是不要加幂等的另外一些简单删除数据的接口无论是逻辑删除还是物理删除看场景的情况下其实也不用加幂等。 但是大部分涉及到多表更新行为的接口咱们最好还是得加上幂等。 接口幂等实战方案 前端防抖处理 前端防抖主要可以有两种方案一种是技术层面的一种是产品层面的 技术层面例如提交控制在100ms内同一个用户最多只能做一次订单提交的操作。 产品层面当然用户点击提交之后按钮直接置灰。 基于数据库唯一索引 利用数据库唯一索引。 我们具体来看一下流程如下 过程描述 数据库乐观锁实现 什么是乐观锁它总是假设最好的情况每次去拿数据的时候都认为别人不会修改所以不会上锁只在更新的时候会判断一下在此期间别人有没有去更新这个数据。 例如提交订单的进行支付扣款的时候本来可能更新账户金额扣款的动作是这样的 update Account set balance  balance-#{payAmount} where accountCode  #{accountCode}加上版本号之后咱们的代码就是这样的。 update Account set balance  balance-#{payAmount},versionversion 1 where accountCode  #{accountCode} and version  #{currVersion}这种情况下其实就要求客户端每次在请求支付下单的时候都需要上层客户端指定好当前的版本信息。 数据库悲观锁实现 悲观锁的话具有强烈的独占和排他特性。 所以我们就用select ... for update这样的语法进行行锁当然蜗牛觉得单纯的select ... for update只能解决同一时刻大并发的幂等所以要保证单号重试这样非并发的幂等请求还是得去校验当前数据的状态才行。 悲观锁 begin;  # 1.开始事务 select * from order where order_code666 for update # 查询订单判断状态,锁住这条记录 ifstatus !处理中{//非处理中状态直接返回return ; } ## 处理业务逻辑 update order set status完成 where order_code666 # 更新完成 update stock set num  num - 1 where spuxxx # 库存更新 commit; # 5.提交事务这边想要强调的是在校验的时候还是得带上本身的业务状态去做校验select ... for update并非万能幂等。 后端生成token 这个方案的本质其实是引入了令牌桶的机制当提交订单的时候前端优先会调用后端接口获取一个tokentoken是由后端发放的。 当然token的生成方式有很多种例如定时刷新令牌桶或者定时生成令牌并放到令牌池中当然目的只有一个就是保住token的唯一性即可。 生成token之后将token放到redis中当然需要给token设置一个失效时间超时的token也会被删除。 当后端接收到订单提交的请求的时候会先判断token在缓存中是否存在第一次请求的时候token一定存在也会正常返回结果但是第二次携带同一个token的时候被拒绝了。 流程如下 token机制 有个注意点大家可以思考一下如果用户用程序恶意刷单同一个token发起了多次请求怎么办 想要实现这个功能就需要借助分布式锁以及Lua脚本了分布式锁可以保证同一个token不能有多个请求同时过来访问lua脚本保证从redis中获取令牌-比对令牌-生成单号-删除令牌这一系列行为的原子性。 分布式锁状态机订单状态 现在很多的业务服务都是分布式系统 当然和上述的数据库悲观锁类似咱们的分布式锁也只能保证同一个订单在同一时间的处理。 其次也是要去校订单的状态防止其重复支付的也就是说只要支付的订单进入后端都要将原先的订单修改为支付中防止后续支付中断之后的重复支付。 在上述小猫的流程中还没有涉及到现金补充如果涉及到现金补充的话例如对接了微信或者支付宝的情况还需要根据最终的支付回调结果来最终将订单状态进行流转成支付完成或者是支付失败。 总结 在我们日常的开发中在一些重要的接口上尤其是资金相关的接口上幂等真的是相当的重要。小伙伴们你们觉得呢如果大家还有好的解决方案或者有其他思考或者意见也欢迎大家的留言。 最后说一句(求关注!别白嫖) 如果这篇文章对您有所帮助或者有所启发的话求一键三连点赞、转发、在看。 关注公众号woniuxgg在公众号中回复笔记  就可以获得蜗牛为你精心准备的java实战语雀笔记回复面试、开发手册、有超赞的粉丝福利
http://www.pierceye.com/news/320981/

相关文章:

  • 公司网站备案名称广东建设项目备案公示网站
  • 网站建设设计维片长治网站建设公司
  • 商务网站建设兴田德润电话多少世界著名网站开发语言
  • 湖北网站建设公司微信手机网站设计
  • 徐州网站制作需要多少钱网站规划设计方案
  • 设计师常用网站门户重庆注册公司流程和费用标准
  • 网站图片太多怎么优化全民推广
  • 湖南做网站 e磐石网络做网站网站盈利会怎么样
  • 网站关闭流程保定风泉网络科技有限公司
  • 学做网站视频工作室网站需要备案吗
  • 个人网站 后台管理咸阳网站建设xymokj
  • 安阳淘宝网站建设保障性租赁住房管理平台
  • 建设银行网站最近都打不开吗在线设计网名生成器
  • 淮滨网站建设公司建设银行有招投标网站吗
  • 岳阳做公司网站可以做司法考试题的网站
  • 深圳做网站联雅asp.net网站很快吗
  • 网站制作公司交接网站网站建设 上海浦东
  • 甘肃省住房和建设厅网站移动网站登录入口
  • 垦利区建设局网站如何零基础学编程
  • wordpress金融小学生班级优化大师
  • 网站链接怎么做标记在哪个网做免费网站好
  • 山西响应式网站建设制作营销网站建设公司排名
  • 商学院网站建设建议深圳市宝安网站建设
  • 营销型网站建设报价方案中国建设银行舟山分行网站
  • 建游戏网站建筑工程公司管理制度
  • 网站风格配置怎么做wordpress下载弹窗插件
  • 合肥建设工会网站做试管网站
  • 商丘市有没有做网站建设工程检测预约网站
  • 网站产品内容在数据库wordpress都可以干什么
  • 宿州哪家做网站不做西安家电商城网站建设