如何防止重复请求提交
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章主要讲解了"如何防止重复请求提交",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何防止重复请求提交"吧!背景在平常开发中,我们经常会面对防止重
千家信息网最后更新 2025年01月21日如何防止重复请求提交
这篇文章主要讲解了"如何防止重复请求提交",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何防止重复请求提交"吧!
背景
在平常开发中,我们经常会面对防止重复请求的问题。当服务端对于请求的响应涉及数据的修改,或状态的变更时,可能会造成极大的危害。重复请求的后果在交易系统、售后维权,以及支付系统中尤其严重。但是很多时候,都是指望着前端来限制,比如提交之后,按钮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
感谢各位的阅读,以上就是"如何防止重复请求提交"的内容了,经过本文的学习后,相信大家对如何防止重复请求提交这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
计数器
数据
验证
缓存
时候
学习
内容
原子
性能
批次
数据库
状态
系统
索引
问题
存储
平常
果断
不用
关键
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
potl服务器ip
互联网科技第一线
计算机网络安全设计背景
有哪些做直方图的数据库
军事理论课之网络安全
企业网络安全设计摘要
塔防纪元服务器维护
网络安全市场的现状分析
七台河软件开发定制
梦幻买号挖图白云山服务器怎么样
平谷区正规软件开发诚信经营
未来网络技术应用方向
apache服务器域名
专利信息检索用什么数据库
一台服务器运行两个tomcat
软件开发背景及重要性怎么描述
网络安全狗iis
怎么改变数据库创建某个表的代码
棋牌app游戏软件开发
佛山教育软件开发
服务器降噪白皮书
mssql数据库链接
云服务器硬件环境
杭州市神舟网络技术有限公司
求生之路2有几个服务器
国家网络安全手抄报简笔无字
服务器变网盘
阿里云计算数据库团队
网络安全警示教育军事
泗阳环保网络技术解决方案