mysql - php高并发下如何防止数据的重复写入
PHP中文网
PHP中文网 2017-04-10 16:46:09
0
18
1160

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

PHP中文网
PHP中文网

认证高级PHP讲师

全員に返信(18)
左手右手慢动作

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

七目鱼

いいねを押す +0
黄舟

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

いいねを押す +0
黄舟

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

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

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

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

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

いいねを押す +0
PHPzhong

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

いいねを押す +0
伊谢尔伦

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

いいねを押す +0
巴扎黑

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

いいねを押す +0
阿神

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

いいねを押す +0
小葫芦

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート