如何防止重复请求提交
发表于:2024-12-01 作者:千家信息网编辑
千家信息网最后更新 2024年12月01日,这篇文章主要讲解了"如何防止重复请求提交",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何防止重复请求提交"吧!背景在平常开发中,我们经常会面对防止重
千家信息网最后更新 2024年12月01日如何防止重复请求提交
这篇文章主要讲解了"如何防止重复请求提交",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何防止重复请求提交"吧!
背景
在平常开发中,我们经常会面对防止重复请求的问题。当服务端对于请求的响应涉及数据的修改,或状态的变更时,可能会造成极大的危害。重复请求的后果在交易系统、售后维权,以及支付系统中尤其严重。但是很多时候,都是指望着前端来限制,比如提交之后,按钮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安全错误
数据库的锁怎样保障安全
上海富凯网络技术有限公司
iso软件开发全套文档
云计算时期的网络安全
开源的java邮箱服务器
软件开发 组织架构
银行软件开发IT杭州年薪
局域网服务器系统安装技术
数据库获得帮助的功能键是?
互联网数据库课程代码
软件开发公司需要的证书
纯真IP数据库技术与应用
西安都有哪些软件开发公司
数据库技术部管理
网络安全规定信息收集
网络安全法新闻转发
空间对象关系型数据库
成都布好网络技术有限公司
csol房间连接服务器超时
高校教育信息化与网络安全心得
深圳旅游软件开发收费
保定租服务器常用解决方案
工业机器人计算机网络技术
九洲之巅网络技术有限公司
代理服务器 下载国外文献
中国国际会议论文全文数据库
AION采集软件开发
双流网络安全征集
网络安全成热门行业
软件开发如何结款
机器人服务器怎么连接电视