您现在的位置是:亿华云 > IT科技类资讯
面试官扎心一问:防止重复请求提交,有什么方案?
亿华云2025-10-09 13:56:15【IT科技类资讯】7人已围观
简介本文转载自微信公众号「UP技术控」,作者 conan5566。转载本文请联系UP技术控公众号。 conan5566背景在平常开发中,我们经常会面对防止重复请求的问题。当服务端对于请求的响应涉及数据的修
本文转载自微信公众号「UP技术控」,面试作者 conan5566。官扎转载本文请联系UP技术控公众号。心问 conan5566
背景
在平常开发中,防止方案我们经常会面对防止重复请求的重复问题。当服务端对于请求的请求响应涉及数据的修改,或状态的提交变更时,可能会造成极大的面试危害。重复请求的官扎后果在交易系统、售后维权,心问以及支付系统中尤其严重。防止方案但是重复很多时候,都是请求指望着前端来限制,比如提交之后,提交按钮diseabled之类的面试,其实这些都是不靠谱的。关键时候还是需要后端来校验。
解决方式
1、b2b供应网基于缓存数据状态的验证
Redis存储查询轻量快速。在request进来的时候,可以先记录在缓存中。后续进来的request每次进行验证。整个流程处理完成,清除缓存。
if (!CacheExtension.getInstance().AddUnique($"{ key}_unique", 1, DateTimeOffset.Now.AddDays(365))) { LogExtention.getInstance().WriteCustomLogAsync("", "", true, "上批次还未执行结束"); return ResponseResult.FromError("上批次还未执行结束!"); } if (!string.IsNullOrEmpty(uniqueKey)) { CacheExtension.getInstance().Remove(uniqueKey); } return ResponseResult.Ok();2、利用唯一索引机制的验证
需要原子性操作,想到了数据库的唯一索引。新建一个表,每次request进来则往表里面插入数据, 操作完成后,删除此条记录。
3、基于缓存的计数器验证
由于数据库的操作比较消耗性能,了解到redis的计数器也是原子性操作。果断采用计数器。既可以提高性能,还不用存储,网站模板而且能提升qps的峰值。 每次request进来则新建一个以orderId为key的计数器,然后+1。如果>1(不能获得锁): 说明有操作在进行,删除。如果=1(获得锁): 可以操作。
redis> SET test 20 OK redis> INCR test (integer) 21 redis> GET test # 数字值在 Redis 中以字符串的形式保存 "21" //获取指定的所有计数器 HGETALL counter:user:{ userID} //获取指定的指定计数器 HMGET counter:user:{ userID} praiseCnt hostCnt //指定点赞数+1 HINCRBY counter:user:{ userID} praiseCnt总结
1、c#本身有lock机制,单体模式可以使用。
2、但是考虑到我们的分布式部署,建议还是用缓存。在大并发的情况下,程序各种情况的发生。特别是涉及到金额操作。所以在大并发要互斥的情况下可以考虑2、3两种方案。企商汇
很赞哦!(239)
上一篇: 4、注册门槛低
下一篇: 第五步:重复第四步,直到找到正确的纪录。
相关文章
- 注册域名要了解几大点?新手有什么方式注册域名?
- JS 中使用扩展运算符的10种方法,好家伙,点个赞呗!
- 前端的批量接口如何快速响应?有没有通用解决方案?
- 图解一致性哈希算法
- 3、不明先知,根据相关征兆预测可能发生的事件,以便提前做好准备,赶紧注册相关域名。;不差钱域名;buchaqian抢先注册,就是这种敏感类型。预言是最敏感的状态。其次,你应该有眼力。所谓眼力,就是善于从社会上时不时出现的各种热点事件中获取与事件相关的域名资源。眼力的前提是对域名领域的熟悉和丰富的知识。
- Kubernetes如何支撑边缘计算平台
- Python和JavaScript——这两种流行的编程语言之间的主要区别是什么?
- 苹果AR/VR专利提出具有内部光反射抑制功能的显示器
- 比较短的域名方便用户记忆和传播,它带来的好处往往会超过其他类型的域名,如果你非要域名短而且还要包含关键词,那么往往会事与愿违,现在这种域名基本上是可遇而不可求的。
- TensorFlow5岁,它成为最受欢迎ML框架的五个原因
热门文章
站长推荐
cm域名有什么独特之处?新人要了解cm域名哪些?
如何在 C# 8 中使用 Channels
用 JavaScript 操作 Cookie
如何再Java Pojo转Jsoy时忽略掉一些属性
用户邮箱的静态密码可能已被钓鱼和同一密码泄露。在没有收到安全警报的情况下,用户在适当的时间内不能更改密码。在此期间,攻击者可以随意输入帐户。启用辅助身份验证后,如果攻击者无法获取移动电话动态密码,他将无法进行身份验证。这样,除非用户的电子邮件密码和手机同时被盗,否则攻击者很难破解用户的邮箱。
重拾Java:这种编程语言为什么不行了?
知道这两个 DOM 属性区别的,头发应该不多了吧?
可能学了假的编程?C++新标准难点解析之可变模板参数