面试官扎心一问:防止重复请求提交,有什么方案?

本文转载自微信公众号「UP技术控」,面试作者 conan5566。官扎转载本文请联系UP技术控公众号。心问 conan5566
背景
在平常开发中,防止方案我们经常会面对防止重复请求的重复问题。当服务端对于请求的请求响应涉及数据的修改,或状态的提交变更时,可能会造成极大的面试危害。重复请求的官扎后果在交易系统、售后维权,心问以及支付系统中尤其严重。防止方案但是重复很多时候,都是请求指望着前端来限制,比如提交之后,提交按钮diseabled之类的面试,其实这些都是不靠谱的。关键时候还是需要后端来校验。
解决方式
1、亿华云基于缓存数据状态的验证
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两种方案。b2b供应网
相关文章
将电脑内存条改成U盘的详细教程(简单快速地将电脑内存条改装成U盘的方法)
摘要:随着科技的不断发展,我们的电脑使用越来越频繁,对存储设备的需求也越来越大。而将电脑内存条改装成U盘是一种非常实用的解决方案。本文将详细介绍将电脑内存条改装成U盘的方法,以及相关的注...2025-11-05使用 Docker Compose 容器化 Golang API 与 MySQL
在本地环境中开发和测试连接到数据库的 API 常常让人头疼不已。数据库往往成为最大的障碍,让开发者陷入泥潭。然而,Docker 的出现为我们带来了福音,它极大地简化了这一过程,使数据库的复制变得轻而易2025-11-05
新的 AI 安全在 2025 年正对 CISO 及其团队构成挑战
安全团队总是必须适应变化,但2025年将出现的新发展可能会使变化特别具有挑战性。AI 创新步伐的加快、日益复杂的网络威胁和新的监管政策将要求首席信息安全官 CISO) 驾驭更复杂的环境。供应商正在迅速2025-11-05
威胁者利用Microsoft Teams语音通话传播勒索软件
Sophos 托管检测与响应MDR)团队发现了两起勒索软件攻击活动,攻击者利用Microsoft Teams获取目标组织未授权访问权限。这两起攻击活动分别由代号STAC5143和STAC5777的威胁2025-11-05探究12年Macmini的性能和特点(一台经典之作,是否依然耐用可靠?)
摘要:12年Macmini作为苹果旗下一款小巧的台式机,于2012年推出,备受用户喜爱。然而,随着时间的推移,新的产品不断问世,我们不禁要问,12年的Macmini是否依然能够满足我们的...2025-11-05
趋势科技的一项调查研究发现,为了尽可能传播恶意软件,攻击者正利用Youtube评论区、谷歌搜索等渠道提供其恶意下载链接。研究人员称,为了增加其恶意内容的可信度,攻击者以一些热门Youtube频道为目标2025-11-05

最新评论