php mysql 防止并发重复操作_mysql-php高并发下如何防止数据的重复写入

前端请求php写入数据的接口太频繁,导致mysql中出现大量重复数据,如何处理

回复内容:

前端请求php写入数据的接口太频繁,导致mysql中出现大量重复数据,如何处理

这个问题从三个方面来回答题主:

前端

前端的话要对请求进行限制,通过disabled提交按钮或者是设置定时器来禁止用户多重提交。

接口

接口一定要做好limit,但是这个并不是解决这个问题的关键点,因为你不可能设置一个limit为1 time per min。为什么关注这个点是因为有时候用户并不是一个人,可能是恶意程序。

后端服务

个人觉得这个是重点,它包括PHP端和Mysql。我不清楚你的数据是怎样的,我举例新浪微博。如果一个用户写好微博然后快速点击了两次发送,你会看到什么?两条相同微博么?不可能,出现了你来找我好了。最简单的做法,要对上次数据缓存,然后校验是否是重复提交的。Mysql结构要设计好,如果你的数据要唯一,那么你的字段和主键设计时候要设置确保唯一性。

先码这么多,解决方法有好多种,可以去搜索一下。

高并发还行吧,防止重复一般都是从数据上去处理的,前端也会做限制,因为重复数据肯定是重复请求,那么页面上防止重复点击肯定是要做的,这肯定不是什么特别有效的方式,加上唯一的约束肯定是最好的方式,无论是请求时第三方的唯一约束,还是时间或者其他你们数据能称作唯一的肯定是最好的。不过重复感觉很难避免,百度贴吧或者微信,qq有时候也会出现重复,尤其是服务器性能降低卡顿的时候。

前端的请求是冗余的吗,是的话前端要做请求防重

最佳解决思路为:将并行转换为串行。

转换的方法有很多,常见的就是队列形式。

首先你可以用UNIQUE INDEX给相应的field防止重复写入

比如 ALTER TABLE thetable ADD UNIQUE INDEX(pageid, name);

其次,要你的选择可以是:

// 选择一:覆盖之前同id的词条

INSERT INTO thetable (pageid, name, somefield)

VALUES (1, "foo", "first")

ON DUPLICATE KEY UPDATE (somefield = 'first')

// 选择二:添加重复计数器

INSERT INTO thetable (pageid, name)

VALUES (1, "foo"), (1, "foo")

ON DUPLICATE KEY UPDATE (pagecount = pagecount + 1)

最后,可以在写入之前先查找,求count(*),不过这种效率比较低。

好像没有有效的方式完美解决这个问题,可以设置一个缓存判断,执行过写入一次,就不再执行下次同一写入

熟悉linux可参考sudo锁;

缓存吧 内存建key 插入关系数据库 延迟销毁 key

好奇怪你们难道都不知道mysql的共享锁吗

加锁啊,共享锁

一般来说都是前端限制下,比如button按钮在后端响应结束之前置灰;一般需求这样做就足够了

七目鱼

前端限制 -- 过滤频繁的请求,如按钮变灰,或者控制一个标志变量来判断是否执行ajax请求 。。这个只是体验,并不能真的限制~~

关键是后端限制

比如: select for update

整个请求的过程都可以做放置重复提交的验证。

在前端控制,比如按钮置灰等

在后端业务逻辑中,通过查询,判断该内容是否已经提交过(通过缓存来记录之类的)

在数据库层通过唯一键的方式来限制重复提交的记录。对于重复提交的内容自动被过滤。

在高并发的情况下,其实还要考虑下db 是不是能够扛得住并发,所以增加队列的限制,使得并发在进入db 的时候是一个串行的操作,当然这个还得看时机情况了。

MYSQL 的话用事务处理吧。。。

楼上回答的,有没有看问题啊。这种情况基本上只能靠前端做限制,或者API规定同一个唯一标识的请求频率。

需要说明什么数据重复了,重复了有什么影响?业务逻辑上要做避免重复的检查吗?先把业务逻辑定义清楚,才能有针对性的出解决方案。

前端先过滤掉重复刷新的。然后服务端再去过滤。

在表单里生成一个唯一的标识,提交的时候判断这个标识的内容有没有提交过了。

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

AppFlow实战:零代码将Dify接入企业微信的完整指南 本文提供了一份零代码将Dify AI应用接入企业微信的完整实战指南。通过使用阿里云AppFlow作为无代码连接器,详细讲解了从获取Dify API密钥、创建企业微信应用到配置自动化流程的全过程,帮助团队快速将AI能力无缝融入日常协作,大幅提升工作效率。 阅读详情

相关推荐

限制 PHP 应用程序多次发送相同请求的方法

然后,在每次请求中,我们都需要验证请求中的令牌是否与会话中存储的令牌匹配。否则,请求可能是重复的或恶意的,可以拒绝处理。会话机制通过在会话中存储标志来判断请求是否已经发送过,而请求令牌则使用唯一的令牌来验证请求的合法性。在每个请求的处理过程中,可以检查该标志是否存在,如果存在则表示该请求已经被发送过,可以采取相应的处理措施(例如返回错误信息)。无论选择哪种方法,都需要在每个请求的起始处进行相应的处理,以确保请求的合法性。然后,在每个请求中,我们通过比较请求中的令牌和会话中存储的令牌来验证请求的合法性。

PeGroovy的博客 727

PHP 实现防抖功能(防重复请求)

PHP 实现防抖功能(防重复请求)

多吉 1600

darknet53.conv.74.zip

darknet yolov3预训练模型

php mysql 防止并发重复操作_PHP_Yii+MYSQL锁表防止并发情况下重复数据的方法,本文实例讲述了Yii+MYSQL锁表防 - phpStudy...

Yii+MYSQL锁表防止并发情况下重复数据的方法本文实例讲述了Yii+MYSQL锁表防止并发情况下重复数据的方法。分享给大家供大家参考,具体如下:lock table 读锁定如果一个线程获得在一个表上的read锁,那么该线程和所有其他线程只能从表中读数据,不能进行任何写操作。lock tables user read;//读锁定表unlock tables;//解锁lock tables use...

weixin_31848413的博客 315

php接口防止多次请求,php中使用redis锁解决被同一秒请求触发多次

最近遇到一个功能,前端安卓人员点击按钮,请求后台接口,后台需要请求大量第三方接口返还给前端,所以导致返回不是很快,前端没有做单次点击限制,导致用户点击多次触发多次,这边瞬间数据表录入多次,所以需要后端对接收到的请求做出限制,在此做出两层限制,一层使用mysql,插入记录时,记录update_time,下次更改时先获取这个时间,如果小于特定时间,提示稍后重试,其二们使用redis的setnx属性,下...

weixin_39807067的博客 1756

php前端接口请求过多、重复

接口请求过多、重复,核心是聚合、缓存、去重、合并、限流。前后端协作,持续优化,监控不可少。

qq_37805832的博客 522

php mysql 防止并发重复操作_mysql - php高并发下如何防止数据重复写入

前端请求php写入数据的接口太频繁,导致mysql中出现大量重复数据,如何处理回复内容:前端请求php写入数据的接口太频繁,导致mysql中出现大量重复数据,如何处理这个问题从三个方面来回答题主:前端前端的话要对请求进行限制,通过disabled提交按钮或者是设置定时器来禁止用户多重提交。接口接口一定要做好limit,但是这个并不是解决这个问题的关键点,因为你不可能设置一个limit为1 time...

weixin_28363123的博客 1337

php出现数据重复写入的解决方法

在我的袋鼠玩趣城小程序项目中,用户领取优惠券的操作时,出现上数据重复记录的现象,也就是说本来只能每人领取一张的操作,个别用户领到了2张或者3张 分析了原因:可能是网络状态不好的情况下,用户多次点击了领取按钮,导至类似高并发的场景 解决办法: 1:从前端解决,(这个方法可以缓解一部分,但我个人认为不可能杜绝) 小程序的前端加上 防抖操作或者做节流操作 2:从后端解决,(php 后端) ...

hjh15827475896的博客 3622

laravel php 并发插入数据重复问题

场景:在并发插入更新的情况下,数据库会出现重复数据的情况出现 下面是一段laravel的示例代码 主要逻辑是判断tt,yy的va字段为空才会执行更新va字段和创建数据,以下为正确示例 在进行并发100测试的时候,出现了多条数据,过滤va为空的条件失效,同时多条请求拿到了VA为空,都进行后续搞作 我们如何去解决这个问题,尝试使用laravel自带的悲观锁去处理,但结果还是会出现相同问题 尝试引入redis去处理 在redis中setnx设置值当key存在时候返回0,不存在时候设置值返回1,.

渡目成书 3387

php mysql 防止并发重复操作_Yii+MYSQL锁表防止并发情况下重复数据的方法

本文实例讲述了Yii+MYSQL锁表防止并发情况下重复数据的方法。分享给大家供大家参考,具体如下:lock table 读锁定如果一个线程获得在一个表上的read锁,那么该线程和所有其他线程只能从表中读数据,不能进行任何写操作。lock tables user read;//读锁定表unlock tables;//解锁lock tables user read local;//本地读锁定表,其他线...

weixin_36139471的博客 290

phpMySQL避免重复提交数据

php防止数据重复提交: //获取来访真实IP if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]){ $key = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]; }elseif($HTTP_SERVER_VARS["HTTP_CLIENT_IP"]){ $key = $HTTP_SERVER_VAR...

夜空下的凝视 1436

php mysql 防止并发重复操作_PHP如何避免高并发下insert into 重复入库

场景:用户签到/分享功能,每天只能签到一次或分享一次数据库:id user_id add_time逻辑分析:用户每天进行分享或签到,得到积分,数据库通过以上字段进行记录,同一时间不可插入多条,一天只能有一条记录,插入前判断是否当天已插入过问题点:用户连点、并发请求等会导致同时插入多条记录,导致积分异常解决方案:使用文件锁,经过以下调整后,golang 30条并发测试只能插入一条。期间也想过...

weixin_42502060的博客 1267

mysql并发写入唯一索引_在Windows 10、Yii2.0、MySQL,实现组合唯一索引,解决高并发情形下的数据重复写入问题的流程...

1、在生产环境上出现了技能数据表中的数据重复写入的情况,如图1图12、但是在写入之前是做了记录是否存在的判断的,game_code与team_code的组合应该是唯一的才是了,如图2图23、建议先查看网址:http://www.shuijingwanwq.com/2017/04/18/1568/ ,由于post所请求的程序的机制,ab的post文件仅支持一次请求的参数,无法模拟出真实的场景,真实...

weixin_34190683的博客 572

PHPMySQL事务处理最佳实践】:掌握高并发场景下的数据一致性秘诀

掌握PHPMySQL事务处理最佳实践,解决高并发数据不一致难题。涵盖事务隔离级别、异常回滚、锁机制等核心方法,保障电商、支付等场景数据安全。提升系统可靠性,值得收藏。

BreakVein的博客 618

php秒杀防重复中奖_PHP如何应对秒杀抢购高并发思路

原标题:PHP如何应对秒杀抢购高并发思路我们常用QPS(Query Per Second,每秒处理请求数)来衡量一个web应用的吞吐率,解决每秒数万次的高并发场景,这个指标非常关键。举个栗子:假设一个业务请求平均为100ms,同时系统内有20台apache web服务器,MaxClients(apache的最大连接数)设置为500,那么理论QPS峰值就是20*500/0.1=100000(理论与实...

weixin_32401763的博客 303

mysql禁止写入数据_mysql防止重复插入记录方法总结

mysql防止重复插入记录方法总结防止mysql重复插入记录的方法有很多种,常用的是ignore,Replace,ON DUPLICATE KEY UPDATE,当然我们也可以在php中加以判断了。方案一:使用ignore关键字如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用:代码如下:代码如下复制代码INSERT IGNORE INTO `table...

weixin_39842475的博客 1387

php mysql防止提取相同数据_PHPmysql中,如何防止数据重复insert?

因为运行的时候有延迟。sql1 = SELECT * FROM posts WHERE mid = 2sql2 = INSERT INTO posts (id,mid,other) VALUES ('',".$c.",'def');因为用了for 循环。首先是检测是否存在Sql1,如果不存在,则sql2。再重复循环。可是,当前sql2第一次没有运行insert时,第二次循环的时候执行Sql1是...

weixin_36382155的博客 348

php如何应对秒杀抢购高并发思路 (乐观锁,悲观锁)

原文地址: http://www.cnblogs.com/weishanyun/p/6891994.html?utm_source=tuicool&utm_medium=referral 我们常用QPS(Query Per Second,每秒处理请求数)来衡量一个web应用的吞吐率,解决每秒数万次的高并发场景,这个指标非常关键。 举个栗子:假设一个业务请求平均为100ms,同时系统内...

lelemom的博客 5402

mysql防止重复插入记录方法总结

mysql防止重复插入记录方法总结 防止mysql重复插入记录的方法有很多种,常用的是ignore,Replace,ON DUPLICATE KEY UPDATE,当然我们也可以在php中加以判断了。 方案一:使用ignore关键字 如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: 代码如下: 代码如下 复制代码...

weixin_34007906的博客 696

php 事务会加锁吗,PHP+MySQL高并发加锁事务处理问题解决方法

这篇文章主要介绍了关于PHP+MySQL高并发加锁事务处理问题解决方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下本文实例讲述了PHP+MySQL高并发加锁事务处理问题解决方法。分享给大家供大家参考,具体如下:1、背景:现在有这样的需求,插入数据时,判断test表有无username为‘mraz'的数据,无则插入,有则提示“已插入”,目的就是想只插入一条username为‘mra...

weixin_31650287的博客 221

PHP+MySQL的电商系统,防止多次重复添加商品

但需要注意的是,哈希值存在极小的概率发生冲突(即两个不同的标题生成相同的哈希值)。为了进一步减少存储空间和提高查询效率,可以对标准化标题计算哈希值(如 MD5 或 SHA256),并将哈希值存储到数据库中。实现这一功能的关键在于对商品标题进行规范化处理,并在数据库中高效地存储和查询这些规范化后的数据。为了实现“字词顺序无关”的匹配,可以将商品标题转化为一个标准化的形式。这种方法既保证了功能的正确性,又兼顾了性能和扩展性,非常适合大规模电商系统的需求。由于商品表已有 1 亿条数据,查询性能可能会成为瓶颈。

长风破浪会有时的博客 824
上一篇: mysql必知必会 create_mysql必知必会样例表create.sql
下一篇: java创建mysql sche_mysql项目sql schema
铁关公女孩
博客等级 码龄7年 40粉丝 95原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值